用矢量编程纸牌。不能在课堂上使用它们

时间:2015-03-05 08:06:03

标签: c++ class methods vector

我目前正在尝试制作纸牌游戏。 当我尝试使用变量“m_lesCartes”时,编译器不允许我使用它。

这就是我在“.h”中创建课程的方法。

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

using namespace std;

class ColonneCartes {
public:
    ColonneCartes();
    virtual ~ColonneCartes();
    void initColonneCartes(vector<Carte> & p_listeCartes);

private:
    vector<Carte> m_lesCartes;
    int m_nbCartesVisibles;

};

当我试图访问“initColonneCartes”中的“m_lesCartes”(在“.cpp”中)时,编译器说没有声明“m_lesCartes”。

#include "ColonneCartes.h"

ColonneCartes::ColonneCartes()
{
    this->m_nbCartesVisibles = 0;
}

ColonneCartes::~ColonneCartes()
{
}

void ColonneCartes::initColonneCartes(vector<Carte> & p_listeCartes)
{
    this->m_lesCartes.clear();
    for (unsigned int i = 0; i< p_listeCartes.size(); i++)
    {
        this->m_lesCartes.push_back(p_listeCartes[i]);
    }
}

如果这有帮助:

Invoking: GCC C++ Linker
    g++  -o "Solitaire"  ./Carte.o ./ColonneCartes.o ./ContratException.o ./jeuSolitaire.o   
    ./jeuSolitaire.o: dans la fonction « __gnu_cxx::new_allocator<Carte>::new_allocator() »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:10: définitions multiples de « ColonneCartes::ColonneCartes() »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:10: défini pour la première fois ici
    ./jeuSolitaire.o: dans la fonction « __gnu_cxx::new_allocator<Carte>::new_allocator() »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:10: définitions multiples de « ColonneCartes::ColonneCartes() »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:10: défini pour la première fois ici
    ./jeuSolitaire.o: dans la fonction « void std::_Construct<Carte, Carte>(Carte*, Carte const&) »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: définitions multiples de « ColonneCartes::~ColonneCartes() »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: défini pour la première fois ici
    ./jeuSolitaire.o: dans la fonction « void std::_Construct<Carte, Carte>(Carte*, Carte const&) »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: définitions multiples de « ColonneCartes::~ColonneCartes() »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: défini pour la première fois ici
    ./jeuSolitaire.o: dans la fonction « ColonneCartes::~ColonneCartes() »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: définitions multiples de « ColonneCartes::~ColonneCartes() »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:15: défini pour la première fois ici
    ./jeuSolitaire.o: dans la fonction « ColonneCartes::initColonneCartes(std::vector<Carte, std::allocator<Carte> >&) »:
    /home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:21: définitions multiples de « ColonneCartes::initColonneCartes(std::vector<Carte, std::allocator<Carte> >&) »
    ./ColonneCartes.o:/home/etudiant/workspace/Solitaire/Debug/../ColonneCartes.cpp:20: défini pour la première fois ici
    collect2: error: ld returned 1 exit status
    make: *** [Solitaire] Erreur 1

1 个答案:

答案 0 :(得分:0)

您发布的编译器错误与您描述的问题无关。问题是链接问题,其中一些符号是多重定义的......

Invoking: GCC C++ Linker
    g++  -o "Solitaire"  ./Carte.o ./ColonneCartes.o ./ContratException.o ./jeuSolitaire.o   

这告诉我们链接器将以下源文件的目标文件合并到您的可执行文件中:Carte.cpp,ColonneCartes.cpp,ContratException.cpp,jeuSolitaire.cpp。
假设您的头文件中没有任何其他定义,其中一个源文件可能定义了ColonneCartes定义的相同ColonneCartes方法,最有可能包括.cpp文件本身:

#include "ColonneCartes.cpp"

您应该在项目文件中查找这样的行,然后将其删除。

不相关的旁注:本着不重新发明轮子的精神,考虑更换这个循环:

for (unsigned int i = 0; i< p_listeCartes.size(); i++)
{
    this->m_lesCartes.push_back(p_listeCartes[i]);
}

使用:

m_lesCartes.insert(m_lesCartes.end(), p_listeCartes.begin(), p_listeCartes.end());

也无关:您已经使用m_来表示会员数据,那么为什么要使用this->呢?