ISO C ++禁止“载体”的声明无类型(ISO C++ forbids declaration o

2019-10-18 07:46发布

当我编译我的项目。我得到的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

的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;
}

我看不到任何错误。 你呢?

Answer 1:

在你的文件“struct.cpp”,你需要#include <string>还有#include <vector>

当然,由于使用“的Tools.h”一切都需要这些,你可能想在顶部坚持他们“的Tools.h”来代替,这样就可以有“的Tools.h”任何地方需要它。



Answer 2:

添加到您的标题:

#include <vector>


文章来源: ISO C++ forbids declaration of ‘vector’ with no type
标签: c++ g++