我最近一直在努力学习自己使用QT,作为练习的一部分,我设置了一些简单的东西来管理一副牌(通过拖放和其他方式添加和删除卡片)这样的简单的东西)。然而,正如你可能想象的那样,它并不像我希望的那样顺利。为了实现这个逻辑,我使用了3个类,Card,Node和Pile,它们都有自己的标题和原型,你可以用它们做什么。
这里的问题是,当我尝试编译它们时,编译器开始抱怨目标文件中有关不同类的功能的重复符号。如果我用" / * * /&#34评论一个;这个问题只会移动一个功能"沿线#34;并且编译器没有抱怨的唯一东西是析构函数。这是我在尝试编译时更具体地说的内容:
duplicate symbol Node::Node(*Card) in Node.o and Node.o
这是(.hpp)标题的样子:
#ifndef NODE_HPP
#define NODE_HPP
#include "Card.hpp"
class Node{
Node *next;
Card *c;
public:
Node() { }
Node(Card *newCard);
~Node();
Node *getNext();
void appendNode(Card *newCard);
void printCard();
void setNext(Node *nextNode);
Card *getCard(); //Returns card in node (with removal)
Card *peekCard(); //Returns card in node (without removal)
};
#endif //NODE_HPP
...这就是实际的.cpp文件的样子:
#include "Node.hpp"
#include "Card.hpp"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
Node::Node(Card *newCard){
c = newCard;
next = NULL;
}
Node::~Node(){
free(c);
delete this;
}
Node* Node::getNext(){
return next;
}
void Node::appendNode(Card *newCard){
if(next == NULL){
next = new Node(newCard);
}
else{
Node* NodePointer = next;
while((NodePointer->getNext()) != NULL){
NodePointer = NodePointer->getNext();
}
NodePointer->next = new Node(newCard);
}
}
void Node::printCard(){
c->printCard();
}
void Node::setNext(Node *nextNode){
next = nextNode;
}
Card* Node::getCard(){
return c;
c = NULL;
}
Card* Node::peekCard(){
return c;
}
所以我现在基本上没有想到可能出错的想法,因为我已经尝试了我能想到的一切,在我看来,代码应该没问题,无论我多么努力地看,我看不出它有什么问题。因此,谷歌搜索和搜索其他一些网站并没有结果,我现在转向stackoverflow,因为你有更多经验的代码向导应该有更好的眼光来发现(至少我是什么)认为是新手的错误。