我试过在谷歌上搜索这个错误,但没有找到任何有用的信息。由于我是编程新手,请耐心等待。这个错误是在我第一次编译card.cpp时出现的,从那以后就一直没有消失。所有我的cpp文件都会给出相同的错误。当我输入 g++ card.cpp(或任何一个.cpp文件)进行编译时,我不断地得到这个错误 -
/tmp/ccW6ByXY.s: Assembler messages:
/tmp/ccW6ByXY.s:13: Error: symbol `_ZNSi6ignoreE' is already defined
/tmp/ccW6ByXY.s:25: Error: symbol `_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE' is already defined
我有我的驱动程序和3个 .h 文件(以及它们各自的 .cpp 文件)。当我单独编译每个文件或一起编译时,它们都会显示此消息。任何信息都将不胜感激。
#include "card.h"
//using namespace std;
Card::Card()
{
rank = 'A';
suit = spades;
}
Card::Card(int _rank, Suit _suit)
{
rank = _rank;
suit = _suit;
}
string Card::toString() const //return string of card (ie 2h)
{
string cardString = suitString() + rankString();
return cardString;
}
int Card::getRank() const
{
return rank;
}
Card::Suit Card::getSuit() const
{
return suit;
}
bool Card::operator == (const Card &rhs) const
{
return (rank==rhs.rank) || (suit == rhs.suit);
}
string Card::suitString() const
{
Suit s = spades;
switch(s)
{
case spades: return "s";
break;
case hearts: return "h";
break;
case diamonds: return "d";
break;
case clubs: return "c";
break;
}
}
以下是card.h文件
#ifndef _CARD_H
#define _CARD_H
#include <iostream>
#include <string>
using namespace std;
class Card
{
public:
enum Suit {spades, hearts, diamonds, clubs};
Card(); // default: ace of spades
Card(int, Suit);
string toString() const; // return string version: Ac 4h Js
int getRank() const; // return rank, 1..13
Suit getSuit() const; // return suit
bool operator == (const Card &rhs) const;
private:
int rank;
Suit suit;
string suitString() const; // return "s", "h",...
string rankString() const; // return "A", "2", ..."Q"
};
#endif
suitString
的默认情况或默认返回值。在头文件中执行using namespace std
是不良实践。添加这些后,我能够编译您的代码而无需错误。您看到的错误必须来自其他地方。 - Brandong++ Card.cpp
编译上述代码时,你会得到多个定义错误吗?如果是这样的话,我无法复现它(在进行一些简单的编译修复后)。 - Pradhan