Linux汇编程序消息错误c++

Linux Assembler message error c++

本文关键字:c++ 错误 消息 汇编程序 Linux      更新时间:2023-10-16

我试过用谷歌搜索这个错误,但没有发现任何有用的东西。我对编程很陌生,所以请耐心等待。这个错误在我第一次编译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

您看到的是对象文件中一些符号的名称被篡改。为了让他们有意义,可以这样使用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存在于多个对象文件中。[查看您的构建命令后继续:)]