【发布时间】:2020-05-10 19:44:38
【问题描述】:
在我的 main.cpp 中,我创建了多个自定义类的对象,例如:
#include "device_manager.hpp"
DeviceManager deviceManager; //compiles and works just fine
但是,当我尝试在同一个 main.cpp 中实现一个简单的模板时:
template <typename T>
inline T max(T a, T b) {
return a > b ? a : b;
}
我明白了:
template with C linkage main.cpp line 35 C/C++ Problem
似乎编译器无法理解 template 关键字。我没有在 main.cpp 中添加任何 extern "C" 块。我尝试使用 gnu++14 编译器(C++14 + gnu 扩展)和 gnu++11 来编译我的 C++ 代码和 gnu11 来编译我的 C-to-C++ 转换项目中的 C 代码。理解 template 关键字可能会出现什么问题?
编辑: 该项目是作为 C 项目生成的,后来我使用 IDE 工具将其转换为 C++ 项目,还将 main.c 更改为 main.cpp。从那时起,我可以毫无问题地在 main.cpp 中声明我的类对象,但是当我尝试在 main.cpp 中使用 template 关键字时,我收到上述错误,就好像它在 extern "C " 声明(但我没有把它放在那里)。
C编译器命令:arm-atollic-eabi-gcc -c,编译器:gnu11
C++编译命令:arm-atollic-eabi-g++ -c,编译器:gnu++14
链接器命令:arm-atollic-eabi-g++ (我在 ARM 嵌入式系统上,用 Atollic TrueStudio IDE 编写)
【问题讨论】:
-
这是 C++ 而不是 C。我删除了无关标签。
-
@jwdonahue 问题提到 C 代码和 C++ 都是编译的,显然问题是链接器/编译器将 C++ 处理为 C。你确定标签是无关的吗?
-
请编辑您的问题以提供minimal reproducible example。你可能还想展示你是如何编译/链接的。
-
问题已编辑。我很乐意就我的问题回答更详细的问题