c ++将指针传递给“multiple”类的向量

时间:2014-01-11 15:16:05

标签: c++

Hy家伙,我需要将一个向量点传递给一个类的构造函数,并在构造函数中将此点传递给其他构造函数,

/*======================== Class Dados/Data ========================*/
class Dados
{
    string nome;
    int valor;
public:
    Dados(string n, int v) : nome(n), valor(v){};
    //~dados();

    string GetNome()const{return nome;}
    int GetValor()const{return valor;}

    void SetValor(int x){valor = x;}



    string GetAsString() const {
        ostringstream oss;
        oss << nome <<": "<< valor;
        return oss.str();
    }
};


/*======================== Class FileReader ========================*/
class FileReader{

    vector<Dados> dados;

public:
    bool ReadFile(string file) {
        dados.empty();
        string fnome, ftemp;
        int fvalor;
        ifstream fich(file);
        string linha;


        if (fich.is_open())                 
        {

            while (fich.peek() != EOF){

                getline(fich, linha);

                istringstream iss(linha);

                //cout << ".";
                iss >> fnome;               
                iss >> ftemp;
                iss >> fvalor;
                dados.push_back(Dados(fnome,fvalor));
            }


            fich.close();

            return 0;

        }
        else{ 
            cout << "Ficheiro \""<< file <<"\" nao encontrado!";
            return 1;
        }
    }


    string GetAsString() 
    {
        ostringstream oss;
        vector<Dados>::const_iterator it;
        it = dados.begin();
        while (it != dados.end()){
            oss << it->GetAsString() << endl;
            it++;
        }
        return oss.str();
    }


    int FindOnVector(string const fi)
    {
        int val = -1; //-1 se for erro
        vector<Dados>::const_iterator it;

        it = dados.begin();
        while (it != dados.end()){

            if(fi == it->GetNome()){
                val = it->GetValor();
            }
            it++;
        }

        return val;
    }


    void Save(){

        vector<Dados>::const_iterator it;

        it = dados.begin();
        while (it != dados.end()){
        cout << it->GetAsString() << endl;
        it++;
        }
    }

};

我有主要的,

void main(int argc,char** argv){
    FileReader fr;


    if( fr.ReadFile(argv[1])==0){
        cout <<endl<< fr.GetAsString();
    }else {
        cout << "[ ERRO ]" << endl;
    }
    jogo g(&fr);
    cout << "\n\n-------------Test2--------------------" << endl;
    fr.Save();
}

另外两个班级:

class jogo{


public:
    jogo(FileReader *A){

        teste t(&A);


    };


};

class teste{

public:
    teste(FileReader *C){

        vector<Dados>::const_iterator it;
        it = C.begin();
        while (it != C.end()){
            cout << it->GetAsString() << endl;
            it++;
        }
    };


};

在Jogo类中,我尝试将FileReader的点传递给测试类,但是不可能。 我做错了什么?

抱歉,这不是必要的具体内容。

错误:在Teste课上 当我尝试使用C指针这个错误:

1   IntelliSense: expression must have class type   e:\is\Documents\ConsoleApplication1\ConsoleApplication1\Source.cpp  141

最好的。

1 个答案:

答案 0 :(得分:0)

哦,我明白了:你很可能在调用teste的构造函数时遇到错误,因为你错过了对该类的Forward引用。使用.h文件为两个类或在jogo之前声明teste。