在多个文件中使用时包含全局向量时出错
Error in including a Global Vector when used in multiple files
// 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{
顺便说一句,你不应该使用全局变量
相关文章:
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何删除包含其他向量的向量?
- boost::interprocess::managed_mapped_file 如何包含弹性向量?
- 包含自身向量的结构
- 我需要声明一个包含整数向量的 4x4 矩阵
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 迭代结构中包含的向量
- 包含特征向量的类的奇异大小
- 删除另一个向量中包含的向量的所有元素的优雅方法
- 计算包含高维向量的两个矩阵之间的最小欧氏距离的最快方法
- 分配包含stl向量的结构时内存泄漏
- 遍历另一个类中包含的向量
- 如何定义包含int向量的sruct的少算子
- C++ 排序类,内部包含类向量
- 包含类向量的类
- C++包含指针向量的类的析构函数
- 如果向量a包含与向量b相同的元素,我如何有效地检查
- 如何移除包含int向量的结构的向量
- 如何释放包含std::向量的对象的内存
- 迭代c++中包含字符串向量的指针集