C++ 为什么';";“外部”;关键字是否在同一文件中工作?

C++ 为什么';";“外部”;关键字是否在同一文件中工作?,c++,extern,conditional-operator,C++,Extern,Conditional Operator,有关“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;

有关“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;
}

告诉编译器:“我将在其他编译单元中为您提供一个
intx
”。请期待在链接时间找到它

因此,您需要另一个文件:

示例8b.cpp

int x = 0;
int y = 0;
int z = 0;
您需要链接项目中的两个文件

但最重要的是:

是什么让你选择把
x
y
z
作为外部人放在首位

结束以下讨论:


  • extern intx表示“某处将有一个x”
  • intx表示“请在此处放置一个
    x
  • 对x的未定义引用
    表示“我没有找到您想要x的位置”

编译器需要一个地方来放置
x
。您没有给它这样的位置,因为
extern
特别要求编译器不要将
x
放在那里。错误是编译器告诉您将
x
放在某个地方。

疑点消除了。已解决的问题(代码编辑)

例2:

#include "somefile.h" 
extern int var; 
int main(void) 
{ 
 var = 10; 
 return 0; 
} 
Assuming that somefile.h contains the definition of var, this program will compile successfully.
资料来源:Geeksforgeks:,建议人:@Calculuswhiz

感谢@Jeffrey

提示:改变你的观点。更可能的情况是,您的期望是错误的,而不是extern“不起作用”。您认为
extern
在该代码中的作用是什么?此外,您正在寻找解决方案的“问题”也不清楚。您只需删除
extern
,问题就消失了
extern intx
表示“声明
x
具有此类型,但未在此处定义”。但您从未在任何地方定义
x
。并且错误消息不是编译错误。这些都是链接器错误。患者说,“医生,我这样做很痛。”。医生说,“那就不要这样做!”你的问题类似于“当我把一个变量声明为常量时,我不能修改它。为什么
const
坏了?”。您必须解释您的推理路线,以便其他人能够指出您的误解。因此,您需要另一个文件::因此,我们不能在同一个文件中定义和声明带有“extern”的变量?@SaikatGuha“extern”是什么意思?是什么让您选择将x、y和z作为extern放在首位?::我在用户代码中看到了它。探索“volatile”、“auto”和“extern”的用法也是如此。所以,这只是一个测试文件,用于使用“extern”。@calculuswiz:“extern”用于全局定义变量。@SaikatGuha抱歉,不,这不是
extern
的意思(提示:external)。我不知道你从哪里得到的。阅读请注意,前两个块不是
extern
的意图,也没有解决代码的基本问题。没有实际理由声明外部变量并在同一文件中定义它。使用
const
作为类比,这就像使用
const\u cast
修改您在代码中预先声明为
const
的变量一样。@Calculuswhiz yes您是对的。如前所述,这只是一个初学者实验代码(代码没有在任何地方使用)“extern”在我们希望在外部文件中使用实例时使用,它仅用于此目的。
int x = 0;
int y = 0;
int z = 0;
#include<iostream>

  extern int x = 0;
  extern int y = 0;
  extern int z = 0;

int main(){
    
    x = 10;
    y = 15;
    
    z = (x>y ? x: y);
    
    std::cout<<z;
     
    return 0;
}
#include<iostream>

  extern int x;
  extern int y;
  extern int z;

int main(){
    
    int x = 10;
    int y = 15;
    
    int z = (x>y ? x: y);
    
    std::cout<<z;
     
    return 0;
}
extern int var; 
int main(void) 
{ 
  var = 10; 
  return 0; 
} 
This program throws an error in compilation because var is declared but not defined anywhere. Essentially, the var isn’t allocated any memory. And the program is trying to change the value to 10 of a variable that doesn’t exist at all.
#include "somefile.h" 
extern int var; 
int main(void) 
{ 
 var = 10; 
 return 0; 
} 
Assuming that somefile.h contains the definition of var, this program will compile successfully.