2013-03-05 2 views
0

Может понравиться кто-нибудь объяснить мне, как связать функции @ functions.cpp в main.cppнеразрешенный внешний символ «INT randomNumber»

Примечание: Я хочу, чтобы оба файла functions.cpp и main.cpp использовать одни и те же переменные от 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 в любом из ваших файлов.

Необходимо указать randomNumber в одном из .cpp-файлов, я предполагаю, что functions.cpp имеет больше смысла здесь.

Также вы можете избавиться от этих строк в main.cpp, так как вы включили Header.h, который уже предоставляет прототипы.

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

Цель 'extern' - разрешить совместное использование одного объекта между несколькими TU. То, что вы предлагаете, вредно для этой цели. Как другие ТУ знают об «extern», если декларация удалена из заголовка? Можно утверждать, что объект нужен только в 'functions.cpp', но в этом случае зачем его начинать с' extern'? Вы предлагаете решить проблему компиляции и связывания в этом случае, но это не тот способ решить эти проблемы. –

+0

Спасибо, что это решило проблему! есть ли способ определить переменную в файле .h и использовать ее в двух из .cpps? – alentor

+1

На самом деле да, я не знал, что вы можете определить ключевое слово extern, а также иметь определение переменной в той же области. Итак, да, вы можете оставить определение в заголовке, позвольте мне обновить ответ. – Tuxdude

Смежные вопросы