LNK2005 中已经定义的函数



我读到"如果你在头文件(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

相关内容

  • 没有找到相关文章

最新更新