标题重复符号c

时间:2012-07-02 09:34:54

标签: c++ header duplicates

我最近一直在努力学习自己使用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,因为你有更多经验的代码向导应该有更好的眼光来发现(至少我是什么)认为是新手的错误。

0 个答案:

没有答案