2017-11-25 160 views
-1

我正在嘗試使用extern變量來獲取我的頭文件和我的主.cpp文件之間的數據。我爲一個外部變量設置了一個.h文件。該文件的標題是externTwo.h:C++中的外部變量

#include <string> 
#include <vector> 
#include "symbolTable.h" 
#include <stack> 
using std::stack; 

extern stack<symbolTable*> parentalStack; 


#endif 

,然後它應該在我的.cpp使用:

#include "symbolTable.h" 
//#include "node.h" 
#include <FlexLexer.h> 
#include<iostream> 
#include<vector> 
#include "externals.h" 
#include "externTwo.h" 
using std::vector; 
using namespace std; 



int yyparse(); 
yyFlexLexer scanner; 
Node *tree; 

extern std::vector<Node*> plantation; 
extern std::stack<symbolTable*> parentalStack; 

int main() 
{ 

    symbolTable* base = new symbolTable(); 
    std::vector<symbolTable*> theTable; 
    parentalStack.push(base); //put the top scope in 
    theTable.push_back(parentalStack.top()); 
} 

最後,在我的額外.h文件中(node.h):

#ifndef NODE_H 
#define NODE_H 
#include<iostream> 
#include<string> 
#include <vector> 
#include <stack> 
#include "symbolTable.h" 
#include "externTwo.h" 

using std::string; 
using std::endl; 
using std::ostream; 
using std::vector; 
using std::stack; 


extern stack<symbolTable*> parentalStack; 



class Node 
{ }; 
#endif 

每當我嘗試訪問parentalStack在主中我收到一個「未定義的引用parentalStack」「錯誤。我很困惑,爲什麼我在外部文件中以同樣的方式聲明瞭外部種植園,並且能夠從主要內部訪問它。如果我嘗試使用parentalStack,我也會從node.h中得到相同的錯誤。

非常感謝提前!

+1

你可以認爲'extern'的含義大概是「這個符號將在別處定義」。所以你實際上需要在你的一個cpp文件中將它定義爲非'extern'。 –

+2

雖然如果你只有一個cpp文件,那麼絕對沒有理由在頭文件中聲明這個變量。 –

回答

1

從cpp文件中刪除extern。這將定義它。 extern只聲明它。只要確保只有一個定義它的.cpp文件。