-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中得到相同的錯誤。
非常感謝提前!
你可以認爲'extern'的含義大概是「這個符號將在別處定義」。所以你實際上需要在你的一個cpp文件中將它定義爲非'extern'。 –
雖然如果你只有一個cpp文件,那麼絕對沒有理由在頭文件中聲明這個變量。 –