gpt4 book ai didi

c++ - 编译源代码时出现多定义错误

转载 作者:行者123 更新时间:2023-12-02 09:53:17 24 4
gpt4 key购买 nike

我有一个简单的C++应用程序:
node.h:

#include<iostream>

using namespace::std;

class Node
{
private:
int data;
Node *next;

public:
Node(int nodeData,Node *nextNode);
};
node.cpp:
#include "node.h"


Node::Node(int nodeData, Node *nextNode) {
data = nodeData;
next = nextNode;
}
linked_list.h
#include "node.h"

class LinkedList
{
private:
Node *head;
Node *tail;
int size;
public:
LinkedList();
int getSize();
};
linked_list.cpp:
#include "linked_list.h"

LinkedList::LinkedList()
{
size = 0;
}

int LinkedList::getSize() {
return size;
}
main.cpp:
#include <iostream>
#include "node.h"
#include "linked_list.h"

using namespace ::std;

int main()
{
cout << "This is main!\n";
return 0;
}
我在linux上,在projcet目录中,我在那儿打开一个终端,并尝试通过以下命令对其进行编译:
g++ *.cpp *.h -o app
但是我得到这个错误:
In file included from linked_list.h:1:0,
from main.cpp:3:
node.h:1:7: error: redefinition of ‘class Node’
class Node
^~~~
In file included from main.cpp:2:0:
node.h:1:7: note: previous definition of ‘class Node’
class Node
^~~~
我在stackoverlfow上看了一些帖子,但是没有解决我的问题的运气。我是C++的新手,我知道编译器认为我在某处重新定义了 Node类,但是在哪里该处可以删除定义?

最佳答案

您的linked_list.h包括node.h,因此编译器在编译node.h时将在main.cpp中看到两次定义。
为避免此问题,应在头文件中添加“include guard”。
应该是这样的:
node.h :

#ifndef NODE_H_GUARD // add this
#define NODE_H_GUARD // add this

#include<iostream>

using namespace::std;

class Node
{
private:
int data;
Node *next;

public:
Node(int nodeData,Node *nextNode);
};

#endif // add this
对于每个 header ,定义和检查的宏名称应不同。
避免此问题的另一种方法是,如果编译器支持,则将 #pragma once添加为 header 的第一行。

关于c++ - 编译源代码时出现多定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62520027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com