2016-06-22 11 views
-1

In einem meiner Projekte kompiliert dieser Code ohne Problem.Einfacher Code mit C++ - Fehlern C4430 und C2143

Aber in einem anderen Projekt mit den gleichen Dateien, kompiliert es nicht. Ich verwende VS2012 und die C/C++ - Eigenschaften sind zwischen den beiden Projekten identisch. Ich habe hier gesucht, konnte aber nichts finden. Jede Hilfe wird geschätzt!

Headerdatei:

#include <vector> 

extern void split(const wstring &s, WCHAR c, vector<wstring>& v); 

C++ Datei:

void split(const wstring& s, WCHAR c, vector<wstring>& v) 
{ 
    string::size_type i = 0; 
    string::size_type j = s.find(c); 

    while (j != string::npos) { 
    v.push_back(s.substr(i, j-i)); 
    i = ++j; 
    j = s.find(c, j); 

    if (j == string::npos) 
     v.push_back(s.substr(i, s.length())); 
    } 
} 

Dies ist, wie ich die Funktion aufrufen:

wstring csToken; 
vector<wstring> vProductVersion; 
TCHAR *sProductVersion = tcalloc(64); 
StringCchCopy(sProductVersion,64,L"3.3.422"); 

// Put the string into a vector array. 
csToken.assign(sProductVersion); 
split(csToken, '.', vProductVersion); 

Hier sind die Fehler der Compiler generiert:

1>c:\\projects\\functions.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>c:\\projects\\functions.h(5): error C2143: syntax error : missing ',' before '&' 
+0

Offensichtlich ist _something_ anders, und es ist zweifelhaft, wir können sehen, was das von hier ist! –

Antwort

3

Sie müssen den Namespace vor wstring im Header

#pragma once 
#include <string> 
#include <vector> 

extern void split(const std::wstring &s, WCHAR c, std::vector<std::wstring>& v); 

Auch gut hinzufügen, um eine Wache hinzuzufügen, so dass, wenn es nicht mehrfach enthalten enthalten ist. (#pragma once)

+0

Vielen Dank! Gelöst. Frage - was meinst du mit nicht mehrfach enthalten? – JeffR

+0

Das Pragma wird einmal verhindern, dass der Header mehrmals eingefügt wird. Z.B. Wenn Sie zwei Dateien haben, die die Kopfzeile enthalten und beide Dateien enthalten, wird sie nur einmal eingeschlossen. –

Verwandte Themen