ISO-C++ verbietet Deklaration von 'vector' with no type
wenn ich kompiliere mein Projekt, ich bin immer dieser komische Fehler für Werkzeuge.h/tools.h.
Der string und vector-Klassen verwendet werden, die über std-namespace. Ich kann einfach nicht sehen, keine Fehler.
g++ powerpi.cpp structs.cpp xmlreader.cpp tools.cpp -o powerpi
In file included from structs.cpp:5:
tools.h:5: error: ISO C++ forbids declaration of ‘vector’ with no type
tools.h:5: error: invalid use of ‘::’
tools.h:5: error: expected ‘;’ before ‘<’ token
tools.h
class Tools {
public:
template<typename T>
static std::string convert(T);
static std::vector<std::string> explode(std::string, std::string);
};
tools.cpp
#include <sstream>
#include <vector>
#include <string>
#include "tools.h"
template <typename T>
std::string Tools::convert(T Number)
{
std::ostringstream ss;
ss << Number;
return ss.str();
}
std::vector<std::string> Tools::explode(std::string delimiter, std::string str)
{
std::vector<std::string> arr;
int strleng = str.length();
int delleng = delimiter.length();
if (delleng==0)
return arr;//no change
int i=0;
int k=0;
while( i<strleng )
{
int j=0;
while (i+j<strleng && j<delleng && str[i+j]==delimiter[j])
j++;
if (j==delleng)//found delimiter
{
arr.push_back( str.substr(k, i-k) );
i+=delleng;
k=i;
}
else
{
i++;
}
}
arr.push_back( str.substr(k, i-k) );
return arr;
}
Ich sehe keinen Fehler. Wie über Sie?
- Fehlt
#include
. (Und wahrscheinlich für<string>
als gut, obwohl Sie scheinen Pech haben und nicht bekommen eine Fehlermeldung) - Sie sollten niemals davon ausgehen, etwas anderes include-Header für Sie.
- Die Fehlermeldung ist über structs.cpp aber du geschrieben tools.cpp...
- Nein der header ist enthalten in structs.cpp aber der eigentliche Fehler ist in tools.h
- Da
convert
ist eine Vorlage haben, sollten Sie auf die definition in den header.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Datei "struct.cpp" Sie müssen
#include <string>
sowie#include <vector>
.Natürlich, da alles, was mit "tools.h" braucht, können Sie wollen, kleben Sie diese oben in "Extras.h" statt, so dass Sie include "tools.h" immer dort, wo es benötigt wird.
/tmp/ccDocdbk.o: In function
Gpio::toString()': structs.cpp:(.text+0x190): undefined reference tostd::basic_string<char, std::char_traits<char>, std::allocator<char> > Tools::convert<int>(int)'
gpio.cppstd::string Gpio::toString() { std::string str = std::string("Gpio { name: ") + name + std::string("; gpio: ") + Tools::convert(gpio) + std::string(" }"); return str; }
Hinzufügen, um Ihre header: