我试图谷歌此错误,但没有找到任何有用的东西。我是编程新手,所以请耐心等待。这个错误显示我第一次编译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
答案 0 :(得分:1)
您所看到的是目标文件中某些符号的错位名称。为了理解它们,请使用c++filt
,如下所示:
$ c++filt -n _ZNSi6ignoreE
std::istream::ignore
$ c++filt -n _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE
std::basic_istream<wchar_t, std::char_traits<wchar_t> >::ignore
好的!这些名字现在看起来很熟悉了。因此,istream::ignore
存在于多个目标文件中。 [看到你的构建命令后继续:)]