# [C++] Probleme mit Vector aus Strings



## Raven280438 (15. September 2010)

Hi,

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



Ich habe einen globalen Vector texte.


```
vector<string> texte(1);
```

Jetzt möchte ich diesen Vector mit Inhalt füllen.
Wenn ich mit

```
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.

```
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?


----------



## sheel (16. September 2010)

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:

```
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...


----------



## MCoder (16. September 2010)

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:

```
// 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


----------



## Raven280438 (22. September 2010)

Hi,

ich habe jetzt eine main.h mit folgendem Inhalt:


```
#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ß


----------



## deepthroat (23. September 2010)

Hi.





Raven280438 hat gesagt.:


> ich habe jetzt eine main.h mit folgendem Inhalt:
> 
> 
> ```
> ...


Man definiert keine Variablen in Headerdateien. Und man verpestet auch nicht den globalen Namensraum in Headerdateien (mit dem using namespace std):

```
// main.hpp
extern ::std::vector<::std::string> texte;
```


```
// main.cpp
::std::vector<::std::string> texte(10);
```



Raven280438 hat gesagt.:


> Diese binde ich nur in der Map.h ein.


Und diese wiederum in main.cpp und MDI.cpp etc.

Gruß


----------

