-8 c++ conditional-operator extern
请参阅下面的示例代码以了解“extern”的使用。当我在代码中使用 extern 关键字时,出现编译错误。请提出问题的解决方案。
#include<iostream>
extern int x;
extern int y;
extern int z;
int main(){
x = 10;
y = 15;
z = (x>y ? x: y);
std::cout<<z;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
example8.cpp:(.rdata$.refptr.z[.refptr.z]+0x0): undefined reference to `z';
example8.cpp:(.rdata$.refptr.y[.refptr.y]+0x0): undefined reference to `y';
example8.cpp:(.rdata$.refptr.x[.refptr.x]+0x0): undefined reference to `x';
F:\DEVC_workspace\collect2.exe [Error] ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
extern int x;
Run Code Online (Sandbox Code Playgroud)
告诉编译器:“我会int x在其他编译单元中为您提供一个”。请期待在链接时找到它。
所以,你需要另一个文件:
示例8b.cpp
int x = 0;
int y = 0;
int z = 0;
Run Code Online (Sandbox Code Playgroud)
并且您需要链接项目中的两个文件。
但最重要的是:
是什么让你选择把x,y并z为外部摆在首位?
结束下面的讨论:
extern int x; 意思是“某处会有一个 x”int x;意思是“请放在x这里”undefined reference to x 意思是“我没有找到你想让 x 去的地方”编译器需要一个地方来放置你的x. 你没有给它这样的地方,因为extern专门要求编译器不要放在x那里。错误是编译器告诉你把它放在x某个地方。