C ++ 11标准的7.1.3[9]
部分声明:
如果typedef声明定义了一个未命名的类(或枚举),则声明声明为该类类型(或枚举类型)的第一个typedef-name用于表示用于链接目的的类类型(或枚举类型)只(3.5)。
[例如:
typedef struct { } *ps, S; // S is the class name for linkage purposes
-end example]
这意味着在下面的示例中,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