【发布时间】:2015-05-29 16:48:36
【问题描述】:
我想为用户定义的类型使用extern 关键字。这意味着我已经在一个文件中声明了对象并在另一个文件中定义了它。我读过 extern 关键字用于声明变量而不定义它。当程序被拆分成多个源文件并且每个源文件都需要使用全局变量时,extern 关键字很有用。如果我在某处错了,请纠正我。
这是我编写的程序,但不幸的是我做错了什么或遗漏了一些东西,所以我得到了编译器错误。
Prog1.cpp
#include <iostream>
using std::cout;
class test
{
public:
void fun();
};
void test::fun()
{
cout<<"fun() in test\n";
}
test t;
Prog2.cpp
#include <iostream>
using std::cout;
extern test t;
int main()
{
t.fun();
}
现在当我编译这两个时使用
g++ -o prog1.cpp prog2.cpp
编译器在 prog2.cpp 中给我以下错误
error: 'test' does not name a type
error: 't' was not declared in this scope
请帮助我知道我在这里做错了什么。
【问题讨论】:
-
extern告诉编译器t的定义在其他地方,但编译器仍然需要test的定义,因为您使用t.fun()来编译Prog2.cpp. -
你为什么有使用
extern的强烈愿望? -
@Nawaz:那么这里到底出了什么问题?
-
将 extern 关键字放在 header 中,而不是 cpp 文件中。 header 的工作是告诉编译器在某处有一个 externally defined 对象。