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 回答
2

请注意,您已将函数定义为

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

C++ 将其视为自由函数,而不是成员函数,因为您没有提到它属于该类。它将您的函数get_rows视为与 完全不同的实体gsiread::get_rows,并且由于编译器找不到gsi::get_rows.

尝试将其更改为阅读

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

更一般地说,即使函数与类在同一个源文件中定义,C++ 也不会假定它是类的一部分。你需要要么

  • 在类体内定义它,或者
  • 用类名显式地为其添加前缀

为了使函数成为成员函数。

希望这可以帮助!

于 2013-10-07T18:42:55.240 回答
1

定义成员函数时,需要将其放在类的范围内:

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

否则,它被视为非成员函数,并且您的成员函数已声明但未定义,从而导致错误。

于 2013-10-07T18:42:48.447 回答