你能帮忙解决这个错误吗? (g ++原型与课堂上的任何一个都不匹配)

时间:2014-01-18 21:58:44

标签: c++ templates g++

这是编译器输出:

[brian@brian-arch-laptop Lab1]$ g++ -g -Wall -std=c++11 objectIO.cpp main.cpp -o main
objectIO.cpp:33:14: error: prototype for ‘std::vector<Type> objectIO<Type>::loadObjects(Type, std::string, unsigned int, unsigned int)’ does not match any in class ‘objectIO<Type>’
 vector<Type> objectIO<Type>::loadObjects(Type dummyObject,
              ^
objectIO.h:14:23: error: candidate is: static std::vector<Type> objectIO<Type>::loadObjects(std::string, unsigned int, unsigned int)
   static vector<Type> loadObjects(Type dummyObject, string fileName, unsigned numObjects,unsigned numLinesPerObject);
                   ^
从我的研究中,我发现这个错误通常在声明一个函数时发生,但是当它们定义它时,它有不同数量的参数或不同类型的参数。我还发现,当使用&#34; const&#34;声明一个函数时,通常会发生此错误。但后来没有使用&#34; const&#34;在定义函数时。

这些情况都不符合我的情况。我有匹配的武器,我没有让我的功能保持不变。以下是我的来源中的问题:

来自我的源(.cpp)文件:

template <class Type>
vector<Type> objectIO<Type>::loadObjects(Type dummyObject,
                     string filename,
                     unsigned numObjects,
                     unsigned numLinesPerObject){/*functionality here*/}

从我的标题(.h)文件:

template <class Type>
class objectIO{
 public:
  static vector<Type> loadObjects(Type dummyObject, string fileName,
                  unsigned numObjects,
                  unsigned numLinesPerObject);

}

2 个答案:

答案 0 :(得分:1)

模板类的所有定义都应放在一个头文件中。

答案 1 :(得分:0)

您的代码在课程结束后缺少分号:

template <class Type>
class objectIO{
 public:
  static vector<Type> loadObjects(Type dummyObject, string fileName,
                  unsigned numObjects,
                  unsigned numLinesPerObject);

} /* <-- RIGHT HERE */

这通常会混淆源代码中的下一步,有时会出现错误的错误消息。