ISO C++禁止在没有类型的情况下声明'vector'

ton*_*oni 1 c++ g++

当我编译我的项目时,我得到了tools.h/tools.h的奇怪错误.字符串和向量类通过std命名空间使用.我只是看不出任何错误.

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
Run Code Online (Sandbox Code Playgroud)

的Tools.h

class Tools {
  public:
    template<typename T>
    static std::string convert(T);
    static std::vector<std::string> explode(std::string, std::string);
};
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我看不出任何错误.你呢?

Mat*_*son 6

在你的文件"struct.cpp"中,你需要#include <string>#include <vector>.

当然,由于使用"tools.h"的所有东西都需要这些,你可能想把它们放在"tools.h"的顶部,这样你就可以在任何需要的地方加入"tools.h".