gpt4 book ai didi

c++ - 卡片和卡片组 : Problem linking classes (environment issues? )

转载 作者:行者123 更新时间:2023-11-28 03:54:08 25 4
gpt4 key购买 nike

编辑:我从 Card.cpp 中删除了 main,然后运行

C:\cpp>g++ Deck.cpp Card.cpp

C:\cpp>g++ Deck.cpp Card.cpp
In file included from Deck.h:8:0,
from Deck.cpp:1:
Card.h: In member function 'Card& Card::operator=(const Card&)':
Card.h:13:12: instantiated from 'void std::vector<_Tp, _Alloc>::_M_insert_aux(
std::vector<_Tp, _Alloc>::iterator, const _Tp&) [with _Tp = Card, _Alloc = std::
allocator<Card>, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterat
or<Card*, std::vector<Card> >, typename std::vector<_Tp, _Alloc>::_Base::_Tp_all
oc_type::pointer = Card*]'
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/stl_vector.h:749:4: ins
tantiated from 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [wit
h _Tp = Card, _Alloc = std::allocator<Card>, value_type = Card]'
Deck.cpp:7:44: instantiated from here
Card.h:13:12: error: non-static const member 'const int Card::rank', can't use d
efault assignment operator
Card.h:13:12: error: non-static const member 'const Suit Card::suit', can't use
default assignment operator
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/vector:6
9:0,
from Deck.h:4,
from Deck.cpp:1:
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/vector.tcc: In member fun
ction 'void std::vector<_Tp, _Alloc>::_M_insert_aux(std::vector<_Tp, _Alloc>::it
erator, const _Tp&) [with _Tp = Card, _Alloc = std::allocator<Card>, std::vector
<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<Card*, std::vector<Card>
>, typename std::vector<_Tp, _Alloc>::_Base::_Tp_alloc_type::pointer = Card*]':
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/vector.tcc:312:4: note: s
ynthesized method 'Card& Card::operator=(const Card&)' first required here

不知道是什么问题。其他人告诉我,它在他们的计算机上编译得非常好。有人知道发生了什么事吗?

卡片.h

#ifndef CARD_H
#define CARD_H

#include <string>

enum Suit {
SUIT_HEART,
SUIT_DIAMOND,
SUIT_CLUB,
SUIT_SPADE
};


class Card {
private:
const int rank;
const Suit suit;
static const char * ranknames[];
static const char * suitnames[];
public:
Card(int r = 1, Suit s = SUIT_HEART) : rank(r), suit(s)
{
}

int GetRank() const { return rank; };
Suit GetSuit() const { return suit; }
std::string ToString() const;
std::string SuitString() const;
std::string RankString() const;
};
#endif

卡片.cpp

#include <iostream>
#include "Card.h"
#include <vector>

const char * Card::ranknames[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
const char * Card::suitnames[] = { "Hearts", "Diamonds", "Clubs", "Spaces" };

std::string Card::ToString() const {
std::string s = RankString();
s.append(" of ");
s.append(SuitString());
return s;
}

std::string Card::SuitString() const {
return suitnames[suit];
}

std::string Card::RankString() const {
return ranknames[rank-1];
}

甲板.h

#ifndef DECK_H
#define DECK_H

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include "Card.h"
#endif

甲板.cpp

#include "Deck.h"

int main() {
std::vector<Card> Deck;

for (int i = 0; i < 10 ; i++) {
Deck.push_back(Card(i+1,(Suit)((i+1)%4)));
std::cout << Deck[i].ToString() << std::endl;
}

}

最佳答案

您是否尝试在命令行上指定两个模块?

g++ -o deck.exe deck.cpp card.cpp

编辑:另外,使用以 _ 或 __ 开头的常量在技术上是非法的。对于 include-guards,我更喜欢使用 MODULE_H

的形式

关于c++ - 卡片和卡片组 : Problem linking classes (environment issues? ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com