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
我读到 "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