[C++] Probleme mit Vector aus Strings

Raven280438

Erfahrenes Mitglied
Hi,

ich fange gerade erst an, mich mit Visual C++ (Windows Forms) zu beschäftigen.



Ich habe einen globalen Vector texte.

C++:
vector<string> texte(1);

Jetzt möchte ich diesen Vector mit Inhalt füllen.
Wenn ich mit
C++:
texte.push_back("Text1");
texte.push_back("Text2");
[...]
den Vector füllen will, bekomm ich eine Fehlermeldung.
1>c:\users\roman\documents\visual studio 2008\projects\mdi\mdi\main.h(10) : error C2143: syntax error : missing ';' before '.'
1>c:\users\roman\documents\visual studio 2008\projects\mdi\mdi\main.h(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\roman\documents\visual studio 2008\projects\mdi\mdi\main.h(10) : error C2371: 'texte' : redefinition; different basic types

Was mache ich falsch?




Meine zweite Frage:
Ich möchte dann den Inhalt des Vectors in einer TextBox ausgeben.
C++:
System::String ^str;

for (unsigned int i=0; i<texte.size(); i++) {
	str = Convert::ToString(texte[i].c_str());
	this->textBox1->AppendText(str);
}

Das funktioniert leider auch nicht ;)


Kann mir jemand weiterhelfen?
 
Zuletzt bearbeitet von einem Moderator:
Die ganzen Winforms sind ein Teil von .NET; im :NET-Bereich bist du also wahrscheinlich besser aufgehoben.
Damit ist die Sprache übrigens nicht C++, sondern C++/CLI, eine von Microsoft "erfundene" C++-Variante mit .NET-Unterstützung.

Erkennt man leicht hier:
Code:
System::String ^str;

^ gibts in C und C++ (in dem Zusammenhang) nicht.

edit: Wo ist Daniel Toplak hin? :( War der nicht mal Mod hier? Es wird Zeit für einen Sticky...
 
Zuletzt bearbeitet:
Hallo Raven280438,

möglicherweise fehlt dir ein 'using namespace std;', um die STL-Klassen benutzen zu können. Außerdem könntest du auch die NET-Containerklassen benutzen. Hier mal beide Varianten:
C++:
// mit std::vector
std::vector<std::string> texte;
texte.push_back("Text1");
texte.push_back("Text2");

for( unsigned int i = 0; i < texte.size(); i++ )
{
    this->textBox1->AppendText(gcnew String(texte[i].c_str()));
}

// mit List<>
List<String^> clr_texte = gcnew List<String^>;
clr_texte.AddRange( gcnew array<String^> {"Text3", "Text4" } );

for each( String^ str in clr_texte )
{
    this->textBox1->AppendText(str);
}
Gruß
MCoder
 
Hi,

ich habe jetzt eine main.h mit folgendem Inhalt:

C++:
#pragma once

#include <string>
#include <vector>

using namespace std;

vector<string> texte(10);

Diese binde ich nur in der Map.h ein.
Ich habe nirgends im ganzen Projekt eine Variable "texte".
Trotzdem bekomme ich folgende Fehlermeldung, die ich nicht richtig verstehe:

1>MDI.obj : error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > texte" (?texte@@$$Q3V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A) already defined in Map.obj

Woran kann das liegen?



Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hi.
ich habe jetzt eine main.h mit folgendem Inhalt:

C++:
#pragma once

#include <string>
#include <vector>

using namespace std;

vector<string> texte(10);
Man definiert keine Variablen in Headerdateien. Und man verpestet auch nicht den globalen Namensraum in Headerdateien (mit dem using namespace std):
C++:
// main.hpp
extern ::std::vector<::std::string> texte;
C++:
// main.cpp
::std::vector<::std::string> texte(10);
Diese binde ich nur in der Map.h ein.
Und diese wiederum in main.cpp und MDI.cpp etc.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück