我是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 )
}
答案 0 :(得分:2)
如果您希望get_rows
成为gsiread
的成员,则其实施需要显示此内容
vector<string> gsiread::get_rows( char filepath[] ) {
// ^^^^^^^^^
答案 1 :(得分:2)
请注意,您已将该功能定义为
vector<string> get_rows ( char filepath[] ) {
...
}
C ++将此视为自由函数,而不是成员函数,因为您没有提到它属于该类。它将您的函数get_rows
视为与gsiread::get_rows
完全不同的实体,并且由于编译器找不到gsi::get_rows
而出现链接器错误。
尝试将其更改为阅读
vector<string> gsiread::get_rows ( char filepath[] ) {
...
}
更一般地说,即使函数在同一个源文件中定义为类,C ++也不会认为它是类的一部分。你需要
为了使该函数成为一个成员函数。
希望这有帮助!
答案 2 :(得分:1)
当您定义成员函数时,您需要将它放在类的范围内:
vector<string> gsiread::get_rows ( char filepath[] ) { .... }
// ^^^^^^^^^
否则,它被视为非成员函数,并且您的成员函数已声明但未定义,从而导致错误。