1

私はC ++を初めて使用し、まだあまり知りません。私はこの奇妙な問題を抱えています。正しく動作している関数がありますが、変更せずにクラスのメンバー関数として実行しようとすると、動作しません: gsiread::get_rows(char *) への未定義参照

#include <string>
#include <vector>
#include <fstream>

using namespace std;
//vector<string> get_rows ( char filepath[] );  ... it works

class gsiread  {

        public:
        vector<string> get_rows ( char filepath[] ); ... it doesnt work

        private:
        };

vector<string> get_rows ( char filepath[] ) {

   vector<string> data;
   string str;

   ifstream file;
   file.open(filepath);

    if( file.is_open() ) {
        while( getline(file,str) ) {

        if ( str.empty() ) continue;
        data.push_back(str);

        }
    }
    return data;
}

// This part is "like" main i am using Qt creator and i have copied parts of code
   from separate files

gsiread obj;

vector<string> vypis;
vypis = obj.get_rows("ninja.txt"); ....... //This doesnt work

vypis = get_rows("ninja.txt");  .......... //This works if I put declaration of
                                           //function get_rows outside the class and
                                           //and use // on declaration inside the class

for( int i = 0; i < vypis.size(); i++ ) {

    QString n = QString::fromStdString(vypis[i]);

    QString t = "%1 \n";

    ui->plainTextEdit->insertPlainText(t.arg(n));


    // QString is like string but zou have to use it if wanna use widgets
    // of qt (I think )
}
4

3 に答える 3

2

get_rowsのメンバーになりたい場合はgsiread、その実装でこれを示す必要があります

vector<string> gsiread::get_rows( char filepath[] ) {
//             ^^^^^^^^^
于 2013-10-07T18:42:27.930 に答える
1

メンバー関数を定義するときは、それをクラスのスコープに入れる必要があります。

vector<string> gsiread::get_rows ( char filepath[] ) { .... }
//             ^^^^^^^^^

それ以外の場合は、非メンバー関数として扱われ、メンバー関数は宣言されていますが定義されていないため、エラーが発生します。

于 2013-10-07T18:42:48.447 に答える