Templatereferenz kann nicht spezialisiert werden

sheel

I love Asm
Hi,
Frage: Habe zb die Folgende Funktionsdef
template<class t> char abc(t& a,unsigned int i);
Als static-Methode in einer Klasse (braucht aber nichts von den Klassenvariablen etc, ist nur so drinnen)

Jetzt bekomm ich bei jedem Aufruf davon die Meldung:
Funktionsvorlage <Signatur> konnte nicht spezialisiert werden mit den folgenden Argumenten: <Typ von der übergebenen Variable>
Egal was ich übergebe (die Funktion besteht (noch) aus einem einzigen return, also mit dem Inhalt sollte es keine Probleme geben)

Hab keine Idee was jetzt los ist, das ist mir mit den Templates auch noch nie passiert:suspekt:

Irgendwer eine Idee?
 
Hi sheel,

das Problem kann ich bei diesem konkreten Beispiel nicht nachvollziehen (weder mit Visual C++ 2008, noch mit GCC 4.3.3):
C++:
#include <string>

class Klass {
 public:
  template<class t>
  static char abc(t& a, unsigned int i) {
    return a[i];
  }
};

int main() {
  std::string str = "abc";
  Klass::abc(str, 2);
  return 0;
}
Du wirst also wohl nicht drumrum kommen, ein vollständiges Minimalbeispiel zu posten, wo der Fehler auftritt.

Grüße, Matthias
 
C++:
#include <windows.h>

class klasse
{
public:
	template<class t> static char funk(t& a);
};

template<class typ>char klasse::funk(typ &param){return 0;}

void main()
{
	int a;
	void *b;
	klasse::funk(a);
}
 
Zuletzt bearbeitet von einem Moderator:
Hab bis jetzt gedacht, das meine Referenzübergabe am ganzen Schuld ist
Das Minimalbeispiel von oben geht jedoch auch ohne Referenz nicht :rolleyes:

Sehr seltsam...dabei habe ich schon oft Templates verwendet, aber bis jetzt noch nie mit der Referenzübergabe.

Compiler ist VC6.0 (ja, er hält sich nicht an den Standart, aber das ist bis jetzt auch immer gegangen)

Für den Code oben ist die Fehlermeldung exakt:

error C2893: Funktionsvorlage 'char __cdecl klasse::funk(typ &)' konnte nicht spezialisiert werden
Mit den folgenden Vorlagenargumenten:
'int'

EDIT:
Interressant, so gehts:
C++:
#include <windows.h>

class klasse
{
public:
	template<class typ> static char funk(typ& param){return 0;}
};

void main()
{
	int a;
	void *b;
	klasse::funk(a);
}
Hier warnt er nur, dass b nicht verwendet wird, aber sonst...

Abend gerettet, muss den Compiler doch nicht wegschmeißen :-)

Danke für die Hilfe!

Sheel
 
Zuletzt bearbeitet von einem Moderator:
Zurück