C++编译报错:'size'重定义与'vect'未定义引用的解决求助
排查C++链接错误:多重定义与未定义引用
一、解决size多重定义问题
- 先查头文件(尤其是VectorNumberList.h):如果里面直接写了
int size = 0;这种变量定义,赶紧改成extern int size;(仅声明),然后在VectorNumberList.cpp里写int size = 0;(真正定义)。头文件被多个cpp包含时,重复定义会触发链接冲突。 - 给所有头文件加上头文件保护,比如在VectorNumberList.h开头加:
防止重复包含导致的隐式重复定义。#ifndef VECTOR_NUMBER_LIST_H #define VECTOR_NUMBER_LIST_H // 原头文件内容 #endif
二、解决vect未定义引用问题
- 确认
vect的声明与定义位置:如果头文件里是extern std::vector<int> vect;,必须在某个cpp文件(比如VectorNumberList.cpp)里补充std::vector<int> vect;的定义,链接器才能找到它的实体。 - 如果
vect是VectorNumberList类的静态成员变量,要在类外(VectorNumberList.cpp)初始化:
静态成员不能只在类里声明,必须在类外定义。std::vector<int> VectorNumberList::vect;
三、核对Makefile与编译流程
- 检查Makefile里的编译目标是否包含了所有需要的cpp文件,比如:
要是漏了VectorNumberList.cpp,链接器就找不到里面定义的符号。all: runner runner: runner.cpp VectorNumberList.cpp g++ -o runner runner.cpp VectorNumberList.cpp
内容的提问来源于stack exchange,提问作者scurry200
相关产品推荐
相关产品推荐

