-2

我读到“如果你在头文件(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”中定义)。

4

1 回答 1

1

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

替换#include<List.cpp>with#include<List.h>并将声明添加emptyList.h

于 2019-07-23T15:57:03.297 回答