Forum: PC-Programmierung C++ Template Problem


von Meik J. (tidemic)


Angehängte Dateien:

Lesenswert?

Sehr geehrte Community,

was übersehe ich.
Danke für die Hilfe.

IDE Microsoft Visual Studio 2017 Community

Fehlermeldung:

Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile 
Unterdrückungszustand
Fehler  C2995  "const myVector<T> &myVector<T>::operator =(const int)": 
Funktionsvorlage wurde bereits definiert.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
32
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C7525  Inlinevariablen erfordern mindestens "/std:c++17". 
bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  22
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2059  Syntaxfehler: "<"  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  22
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "{"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
23
Fehler  C2447  "{": Funktionsheader fehlt - Parameterliste im alten 
Stil?  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  23
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C7525  Inlinevariablen erfordern mindestens "/std:c++17". 
bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  28
Fehler  C2373  "myList": Neudefinition; unterschiedliche Modifizierer 
bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  28
Fehler  C2059  Syntaxfehler: "<"  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  28
Fehler  C2039  "=": Ist kein Element von "`global namespace'"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "{"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
29
Fehler  C2447  "{": Funktionsheader fehlt - Parameterliste im alten 
Stil?  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  29
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
15
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
15
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
16
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
16
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
22
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
22
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
22
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
28
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
28
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\myvector.h 
28
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22

von Rolf M. (rmagnus)


Lesenswert?

Deine Include-Guards sind falsch. Die müssen natürlich den ganzen Header 
umfassen und nicht nur den halben.
Außerdem hast du eine Überkreuz-Abhängigkeit. myVector.h inkludiert 
myList.h und umgekehrt. Das funktioniert natürlich nicht.

: Bearbeitet durch User
von Meik J. (tidemic)


Angehängte Dateien:

Lesenswert?

Danke für deine Antwort Rolf.

jetzt haben sich unsere Antworten überkreuzt. ;)

Mit Include Guards, meinst du die Präprozessor Direktiven
#Ifdefine ... , um den gesamten Code der **.h.
Die Fehlermeldungen werden weniger. Aber..

1. Habe ich schon ausprobiert ... kein voller Erfolg.
2. War das auch die Auto Quellcode Generierung von
   von Visual Studio.


MfG Meik

Fehlermedlungen

Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile 
Unterdrückungszustand
Fehler  C2447  "{": Funktionsheader fehlt - Parameterliste im alten 
Stil?  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  29
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
14
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
14
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
15
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
15
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C4430  Fehlender Typspezifizierer - int wird angenommen. 
Hinweis: "default-int" wird von C++ nicht unterstützt.  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2143  Syntaxfehler: Es fehlt "," vor "<"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2953  "myList": Klassenvorlage wurde bereits definiert. 
bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  17
Fehler  C2988  Unerkannte Vorlagendeklaration/-definition  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
22
Fehler  C2059  Syntaxfehler: "const"  bsplForum  d:\dokumente\visual 
studio 2017\projekte\bsplforum\bsplforum\mylist.h  22
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "{"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
23
Fehler  C2447  "{": Funktionsheader fehlt - Parameterliste im alten 
Stil?  bsplForum  d:\dokumente\visual studio 
2017\projekte\bsplforum\bsplforum\mylist.h  23
Fehler  C2062  "unknown-type"-Typ unerwartet  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
28
Fehler  C2143  Syntaxfehler: Es fehlt ";" vor "{"  bsplForum 
d:\dokumente\visual studio 2017\projekte\bsplforum\bsplforum\mylist.h 
29

: Bearbeitet durch User
von Meik J. (tidemic)


Lesenswert?

Ja deine Überkreuz Erklärung macht Sinn.
"Damm it!" Stehe zurzeit ein wenig neben mir.
Und bin auch kein Template Pro.
Kann ich die den im Header im Vorwege deklarieren...
Oder wie?

von Meik J. (tidemic)


Lesenswert?

Ach hatte auch noch ein #endif vergessen.
Läuft aber noch nicht..

von Rolf M. (rmagnus)


Lesenswert?

Meik J. schrieb:
> Kann ich die den im Header im Vorwege deklarieren...
> Oder wie?

Das ist gerade erst hier thematisiert gewesen. Zwei Threads weiter:
Beitrag "C++: template class vorwärts deklarieren?"

Und noch was:
1
template<typename T>
2
inline const myList<T>& myList<T>::operator=(const myVector<T>& inst)
3
{
4
  //code
5
  return this;
6
}
Es muss *this heißen.

: Bearbeitet durch User
von Meik J. (tidemic)


Lesenswert?

Nochmals danke Rolf,

ja den anderen Thread hatte ich schon gesehen.
Bin heute nur echt reif für den Feierabend.
Und bekomme das nicht implementiert.

Und der Inhalt des this Zeigers ist doch die
Adresse des Objekt's. Und der Inhalt einer
Referenz ist doch auch diese Adresse ?!
Ich gebe ja nur eine Referenz zurück.
Aber gucke ich mir morgen mal an.

Dir noch einen schönen Abend.
MfG Meik

: Bearbeitet durch User
von Meik J. (tidemic)


Angehängte Dateien:

Lesenswert?

Es hat mir doch keine Ruhe gelassen!

Es läuft, Visual Studio meckert
nicht mehr"Juhu!".
Und wie immer im nachhinein auch
ganz logisch.

Für alle die es interessiert, siehe
Anhang.


MfG Meik

: Bearbeitet durch User
von M.K. B. (mkbit)


Lesenswert?

Meik J. schrieb:
> Und der Inhalt des this Zeigers ist doch die
> Adresse des Objekt's. Und der Inhalt einer Referenz ist doch auch diese
> Adresse ?!
> Ich gebe ja nur eine Referenz zurück.

Ja, aber es geht hier ja um den Typ. Eine Referenz muss immer auf ein 
Objekt zeigen, deshalb musst du den Pointer erst dereferenzieren.

von Meik J. (tidemic)


Lesenswert?

Guten Morgen,

ich merke gerade das ich mich anscheinend zu lange
nicht mehr ausreichend mit C++ beschäftigt habe.

Genau " return *this; " so steht es auch in meinen letzten
Projekt Quellcode von 2017.

Danke und euch eine erfolgreiche Woche.

MfG Meik

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

1
myList(); //Sonst weint Visual Studio
Ist aber gar nicht unbedingt nötig. Nur wenn du es irgendwo aufrufst...
1
myList(const myVector<T> & inst); //Kopierkonstruktor
Das ist die gefährlichste Art von Kommentar - er ist nämlich falsch! Das 
ist kein Copy Constructor, sondern nur ein "ganz normaler". Da lieber 
gar keinen Kommentar...

von Meik J. (tidemic)


Lesenswert?

Hallo Niklas,

danke für deine Antwort.
Ja, du hast Recht.

myList(const myList<T> & inst); //Kopierkonstruktor

wäre wesentlich besser.

Etwas konstruktive Kritik von meiner Seite.
Schreib doch vielleicht Antworten nicht so
das sie sich ihrer Erläuterung schuldig bleiben.

MfG Meik

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Was fehlt denn da an Erläuterung? Ich hätte gedacht, es sei Absicht, 
dass ein myVector übergeben werden soll und dass es absichtlich kein 
Copy-Constructor ist und nur der Kommentar falsch ist.

von Meik J. (tidemic)


Lesenswert?

Richtig das Kommentar war falsch.

Wäre doch ganz nett gewesen eine richtige
Kopierkonstruktor Deklaration dem
gegen über zustellen.

Aber ich möchte jetzt keine Diskussion
vom Zaun brechen. Deswegen Danke für deine
Hilfe.

Es ist aber auch nur ein schnell
runtergetippter Beispiel Quellcode gewesen.
Der leider mit Flüchtigkeitsfehlern gespickt war.

MfG Meik

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Meik J. schrieb:
> Wäre doch ganz nett gewesen eine richtige
> Kopierkonstruktor Deklaration dem
> gegen über zustellen.

Naja, das kann man doch ruck-zuck googlen...

von Rolf M. (rmagnus)


Lesenswert?

Niklas G. schrieb:
> myList(); //Sonst weint Visual StudioIst aber gar nicht unbedingt nötig.
> Nur wenn du es irgendwo aufrufst...
> myList(const myVector<T> & inst); //Kopierkonstruktor
> Das ist die gefährlichste Art von Kommentar - er ist nämlich falsch! Das
> ist kein Copy Constructor, sondern nur ein "ganz normaler". Da lieber
> gar keinen Kommentar...

Naja, es ist ein Konvertierkonstruktor, das ist zwar was anderes als ein 
Kopierkonstruktor, aber geht in der gleichen Weise über einen "ganz 
normalen" Konstruktor noch etwas hinaus.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.