这是我的代码文件
VectorNumbeList.cpp
#include <iostream>
#include "VectorNumberList.h"
void initialize() {
vect = new int[10];}
VectorNumberList.h
#include <vector>
#include <cstdlib>
#include "NumberList.h"
extern int* vect;
size_t size_real;
void initialize();
NumberList.h
#ifndef NUMBER_LIST_H
#define NUMBER_LIST_H
#include <cstdlib>
class NumberList {
public:
virtual void addNumberToList(int num) = 0;
virtual void removeNumberFromFront() = 0;
virtual void removeNumberFromBack() = 0;
virtual int getNumberAt(size_t index) = 0;
virtual size_t getSizeOfList() = 0;
virtual void clear() = 0;
void printNumbers();
void computeNextFibonacciAndInsertAtEnd();
void computeNFibonacci(size_t n);
void copyListIntoMe(NumberList &numList);
void reverseList();
};
#endif
runner.cpp
#include <iostream>
#include <string>
#include <vector>
#include "VectorNumberList.h"
int main() {
initialize();
return 0;
}
Makefile(runner是文件夹名,与runner.cpp不同)
CXX=g++
runner: runner.cpp VectorNumberList.cpp
$(CXX) runner.cpp VectorNumberList.cpp -o runner
clean:
rm runner *~
我的错误最终与链接有关,但我不确定如何解决它。非常困惑,帮助将不胜感激。错误声明
g++ runner.cpp VectorNumberList.cpp -o runner
/tmp/ccJYylpB.o:(.bss+0x0): multiple definition of `size'
/tmp/ccLyM4kA.o:(.bss+0x0): first defined here
/tmp/ccJYylpB.o: In function `initialize()':
VectorNumberList.cpp:(.text+0x11): undefined reference to `vect'
collect2: error: ld returned 1 exit status
Makefile:3: recipe for target 'runner' failed
make: *** [runner] Error 1
我试过通过删除runner.cpp或vectornumberlist.cpp中的include语句来修改它们,但没有成功。我很困惑,因为我是C++的新手。它与头文件有关,但我不确定如何处理,除了从vectornumberlist. h文件中删除vect和size变量。
2条答案
按热度按时间tkclm6bt1#
该错误主要与size变量的多个定义以及对vect变量的未定义引用有关。
这是因为您在头文件VectorNumberList. h中将这些变量声明为extern,但尚未在任何源文件中定义它们。
您需要从vect的声明中删除extern关键字。在VectorNumberList.cpp中定义vect变量
在VectorNumberList.cpp中,定义大小变量
更新后的VectorNumberList.cpp:
更新后的VectorNumberList.h::
我希望这能解决你的问题。
mznpcxlj2#
VectorNumberList.h
有但这只是一个声明,而不是定义。你需要相应的定义:
在你的
cpp
文件中。然后它将链接没有错误。