我读到"如果你在头文件(Header.h)中声明并实现一个函数,并且如果这个文件被包含两次,那么你很可能会在某个时候得到一个已经定义的函数错误。但是在我的代码中,我遇到错误的所有函数都在.cpp文件中。
列表.h
#pragma once
typedef struct list
{
int lin;
int col;
int val;
struct list* next;
struct list* prev;
}list;
列表.cpp
#include "List.h"
bool empty(list*& start)
{
return (start == nullptr);
}
矩阵.h
#pragma once
#include "List.h"
class Matrice
{
private:
list* start;
list* finish;
public:
Matrice() :start(nullptr), finish(nullptr) {}
Matrice(const Matrice& matrice);
};
矩阵.cpp
#include "Matrice.h"
#include "List.cpp"
Matrice::Matrice(const Matrice& matrice)
{
if (empty(start))
{
// Code
}
}
资料来源.cpp
#include "Matrice.h"
#include <iostream>
int main()
{
Matrice a;
Matrice b;
a = b;
}
我添加了所有文件,也许有些东西我没有看到。错误出在bool empty(list*& start)
函数上("已在List.obj
中定义")。
您的Matrice.cpp
中有一个#include<List.cpp>
,当您将所有 cpp 文件编译和链接在一起时,这将导致List.cpp
中定义的所有内容的重复定义,因为它们也是在Matrice.cpp
中定义的,因为它们也是在 中定义的。
将#include<List.cpp>
替换为#include<List.h>
,并将empty
声明添加到List.h