gpt4 book ai didi

C++ 函数的错误信息重定义

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:29 24 4
gpt4 key购买 nike

我正在使用两个堆栈来实现一个队列类。我的头文件如下所示:

#ifndef _MyQueue_h
#define _MyQueue_h
using namespace std;

template <typename T>
class MyQueue {

public:
MyQueue();
~MyQueue();
void enqueue(T element);
T peek();
void dequeue();
int size();
bool empty();

private:
int count;
stack<T> stk1;
stack<T> stk2;
};
# include "MyQueue.cpp"
# endif

我的 cpp(实现)文件如下所示:

#include <stack>
#include "MyQueue.h"
using namespace std;

template <typename T>
MyQueue<T>::MyQueue()
{
count = 0;
}

template <typename T>
MyQueue<T>::~ MyQueue()
{
}

template <typename T>
void MyQueue<T>::enqueue(T element)
{
stk1.push(element);
count ++;
}

(其他功能省略)

但是,使用 Xcode 4.5 时,它一直说我的函数(MyQueue、~MyQueue、enqueue、peek 等)被重新定义了。谁能帮我弄清楚我在哪里重新定义了它们?

谢谢

最佳答案

你正在尝试我真的不喜欢的东西。这是一种伪装。

删除#include "MyQueue.cpp",替换为MyQueue.cpp的内容,删除MyQueue.cpp文件。现在一切正常。

您试图假装模板代码可以拆分为头文件和实现文件。但是因为它不能,所以你必须通过在头文件中包含实现文件来作弊。如果您不作弊或伪装,并且只有一个文件,即头文件,里面包含所有内容,那么就不会那么困惑。

您获得重新定义的确切原因是您正在编译包含您的头文件的 cpp 文件,该文件再次包含您的 cpp 文件。所以 cpp 文件的内容被编译了两次。

关于C++ 函数的错误信息重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965300/

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