LNK2005 函数已经定义在

LNK2005 function already defined in

我读到 "if you declare and implement a function in a header file (Header.h) and if this file gets included twice, then you'll most likely will get a function already defined error at some point."。但是在我的代码中,我遇到错误的所有函数都在 .cpp 文件中。

List.h

#pragma once

typedef struct list
{

    int lin;
    int col;
    int val;

    struct list* next;
    struct list* prev;

}list;

List.cpp

#include "List.h"

bool empty(list*& start)
{
    return (start == nullptr);
}

Matrice.h

#pragma once

#include "List.h"   

class Matrice
{
private:

    list* start;
    list* finish;

public:

    Matrice() :start(nullptr), finish(nullptr) {}
    Matrice(const Matrice& matrice);

};

Matrice.cpp

#include "Matrice.h"
#include "List.cpp"

Matrice::Matrice(const Matrice& matrice)
{
    if (empty(start))
    {
        // Code
    }
}

Source.cpp

#include "Matrice.h"
#include <iostream>

int main()
{
    Matrice a;
    Matrice b;
    a = b;
}

我添加了所有文件,可能有些东西我没有看到。错误在 bool empty(list*& start) 函数 ("already defined in List.obj").

您的 Matrice.cpp 中有一个 #include<List.cpp>,当您编译 link 所有 cpp 文件时,这将导致 List.cpp 中定义的所有内容的重复定义,因为它们由于包含,也在 Matrice.cpp 中定义。

#include<List.cpp>替换为#include<List.h>并将empty的声明添加到List.h