2013-03-05 82 views
0

可以请别人解释我如何将功能随心连动@ functions.cpp到Main.cpp的解析的外部符号“INT randomNumber”

注:我想这两个文件functions.cpp和main.cpp中使用相同的变量from header.h

谢谢!

的main.cpp

#include "Header.h" 
#include <iostream> 

using namespace std; 
int multi(); 
int printOutRanomdNumber();  


int main() 
{ 
cout << "Eneter a number you want to multiply" << endl; 
cout << multi() <<endl; 
cout << printOutRanomdNumber(); 

system("pause"); 
return 0; 
} 

header.h

#ifndef _HEADER_ 
#define _HEADER_ 

#include <iostream> 

using namespace std; 

extern int randomNumber; 
int multi(); 
int printOutRanomdNumber();  


#endif 

functions.cpp

#include "Header.h" 
#include <iostream> 

using namespace std; 

int multi() 
{ 
    int x; 
    cin >> x; 
    return(x=x*x); 
} 
int printOutRanomdNumber() 
{ 
    cout << "Please enter a random number" << endl; 
    cin >> randomNumber; 
    return (randomNumber); 
} 

回答

1

的错误是因为你未在您的任何文件中定义int randomNumber

您需要在.cpp文件之一中定义randomNumber,我猜functions.cpp在这里更有意义。

此外,您可以在main.cpp中删除这些行,因为您已经包括Header.h,它已经提供了原型。

int multi(); 
int printOutRanomdNumber(); 
+0

'extern'的目的是允许单个对象在多个TU之间共享。你的建议对此目的不利。如果声明从头文件中删除,其他TU如何知道'extern'?有人可能会争辩说,该对象只在'functions.cpp'中需要,但是在那种情况下为什么要使用'extern'来开始?你提出的建议将解决这种情况下的编译和链接错误,但这不是解决这些问题的正确方法。 – 2013-03-05 04:40:24

+0

谢谢你解决了这个问题!有没有办法在.h文件中定义一个变量并在两个.cpps中使用它? – alentor 2013-03-05 04:41:24

+1

实际上是的,我没有意识到你可以定义extern关键字,也可以在同一范围内定义变量。所以是的,你可以在头文件中留下定义,让我更新答案。 – Tuxdude 2013-03-05 04:46:41