C ++中的外部变量

时间:2017-11-25 19:42:53

标签: c++ class pointers stack extern

我试图使用extern变量来获取我的一个头文件和我的主.cpp文件之间的数据。我有一个.h文件只为外部变量设置。该文件名为externTwo.h:

#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

每当我尝试在main中访问parentalStack时,我都会收到一个&`34;未定义的对`parentalStack&#39;&#34;错误。我很困惑为什么因为我在一个单独的extern文件中以相同的方式声明了extern种植园,并且能够从main中获得它。如果我尝试使用parentalStack,我也会从node.h中获得相同的错误。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

从cpp文件中删除extern。这将定义它。 extern仅声明它。只需确保只有一个定义它的.cpp文件。