typedef声明定义未命名类时链接失败
Link failure when typedef declaration defines unnamed class
C++11标准的7.1.3[9]
节规定:
如果typedef声明定义了一个未命名的类(或枚举),则声明声明为该类类型(或枚举类型)的第一个typedef名称用于表示仅用于链接目的的类类型(或者枚举类型)(3.5)
[示例:
typedef struct { } *ps, S; // S is the class name for linkage purposes
-结束示例]
这意味着在下面的示例中,Foo
应该用作未命名类的名称,并在下面的例子中用于链接目的:
//foo1.cpp
typedef class
{
public: int f();
} Foo;
int Foo::f()
{
return 5;
}
由于Foo::f()
是在foo1.cpp
中定义的,编译器不应该抱怨。
//foo2.cpp
typedef class
{
public: int f();
} Foo;
Foo foo;
int main()
{
return foo.f();
}
但是,GCC 4.8
出现链接错误。我是不是错过了什么?
$g++ foo1.cpp foo2.cpp
/tmp/ccMwHawT.o: In function `main':
713Y51.cpp:(.text+0x24): undefined reference to `Foo::f()'
collect2: error: ld returned 1 exit status
我认为你是对的。除了你的问题之外,标准中没有什么可以补充的。
这是GCC中一个长期存在的错误。clang同意你的解释并接受你的计划。
相关文章:
- mapreduce c编程与-fPIC链接失败,如何解决?
- 引用构造函数时链接失败
- 嵌入 python3.6 和 MinGW 在C++链接失败
- MAKE/CMAKE子目录链接到外部库的链接失败
- 与 CMAKE 的静态链接失败
- Android中的OpenCV 4.0.1链接失败
- 在静态库中链接失败,但链接共享库成功
- .so中存在的符号已编译.o引用了它,但链接失败
- 使用签证编译 dll / exe - 链接失败
- 在C++程序上使用mpicc链接失败
- 与iOS项目上的C 库链接失败
- C++链接失败-ld:找不到[makefile][gcc/cygwin]
- clang++链接失败:错误:源文件不是有效的UTF-8
- OpenCV:提供给imread()的链接失败
- 错误: /usr/bin/ld: 最终链接失败: 文件被截断
- 链接失败。如何使用'NtQuerySystemTime'窗口功能?
- 变量模板链接失败
- 克隆链接失败
- 安特尔和链接失败
- 最终链接失败:包含 windows.h 时参数无效