'<' 标记之前的预期初始化程序

新手上路,请多包涵

我在头文件中有一个模板类 myClass 原型,并在头文件末尾包含的 .cpp 文件中实现它。当我使用代码时:

 template<typename T>
class myClass {
public:
    void myFunction(const T item);
};

在头文件和

template <class T>
void myClass<T>::myFunction(const T item)
{
//stuff
}

在实现文件中,我在实现代码的第 2 行得到了上述错误。我在另一个程序中使用了相同的完全相同的语法,并成功编译并正确运行结果,所以我很困惑。 .cpp 文件中有三个不同的函数定义,并且在各自的行上都有相同的错误。我假设我犯了一个小错误,但我真的无法弄清楚。

非常感谢帮助和解释。

编辑:

这是一个具有相同错误的 SSCCE:main.cpp

 #include <iostream>
#include "myClass.h"

using namespace std;

int main(){
myClass<int> example;
example.myFunction(1);
return 0;
}

我的类.h

 #include<iostream>

#ifndef MYCLASS_H_
#define MYCLASS_H_

template<typename T>
class myClass {
public:
    void myFunction(const T item);
};

#include "myClass.cpp"
#endif /* MYCLASS_H_ */

我的类.cpp

 using namespace std;

template <class T>
void myClass<T>::myFunction(const T item)
{
    cout << "Hello World!";
}

我正在使用带有 GNU GCC 编译器的 Code::Blocks 10.05。

原文由 user2228675 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 669
2 个回答

我终于通过从构建配置中删除 myClass.cpp 解决了这个问题。不知道为什么这是必要的,但它现在完美无缺。

原文由 user2228675 发布,翻译遵循 CC BY-SA 3.0 许可协议

将该方法的实现也放在头文件中( .h

编译器需要知道翻译单元中的实现细节。

原文由 masoud 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题