在多个文件中使用时包含全局向量时出错

Error in including a Global Vector when used in multiple files

本文关键字:包含全 向量 出错 文件      更新时间:2023-10-16
// Main.cpp
#include <iostream>
#include "common.h"
#include "second.cpp"
#include <vector>
int main(){
  global = 10;
  ip.push_back("TestTest");
  std::cout << global << std::endl;
  TestClass t;
  t.print();
}
//common.h
#ifndef GLOBAL_H
#define GLOBAL_H
#include <vector> 
#include <string>
extern int global;
extern std::vector<std::string> ip ; 
#endif
// second.cpp
#include <iostream>
#include "common.h"
int global;
class TestClass{
  public:
    void print();};
void TestClass::print(){
  global++;
  std::cout << "Global: "<<global << std::endl;
  std::cout << "IP String: "<<ip[0] << std::endl;
}
// Console Error
ubuntu:deleteme$ g++ main.cpp
/tmp/ccoJpYRl.o: In function `TestClass::print()':
main.cpp:(.text+0x55): undefined reference to `ip'
/tmp/ccoJpYRl.o: In function `main':
main.cpp:(.text+0xdd): undefined reference to `ip'
collect2: error: ld returned 1 exit status

当我只是使用int global变量时,上述工作。然而,当我将向量ip添加到common.h时,我得到了显示的错误。

这似乎是一个基本的事情,但无法得到答案。

提前感谢:)

您没有定义std::vector<std::string>。使用extern,你只是声明它是全局的,但在另一个地方定义。您应该在second.cpp

int global下添加该定义
// second.cpp
#include <iostream>
#include "common.h"
int global;
std::vector<std::string> ip;
class TestClass{

顺便说一句,你不应该使用全局变量