5

コンパイルエラーが発生します

cannot call member function ‘bool GMLwriter::write(const char*, MyList<User*>&, std::vector<std::basic_string<char> >)’ without object

コンパイルしようとすると

 class GMLwriter{
    public:
    bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges);
};

関数は後で定義され、で呼び出されmainます

GMLwriter::write(argv[3], Users, edges);

ユーザーは以前に宣言されておりMyList<User*> Users;(MyListはリストADTであり、ユーザークラスがあります)、エッジは次のように宣言されていますvector<string>edges

このエラーは何objectを指していますか?

4

3 に答える 3

18

GMLwriter::writeは GMLwriter の静的関数ではないため、オブジェクトを介して呼び出す必要があります。例えば:

GMLwriter gml_writer;   
gml_writer.write(argv[3], Users, edges);

GMLwriterGMLwriter::writeの状態に依存しない ( のメンバーにアクセスするGMLwriter) 場合は、静的メンバー関数にすることができます。次に、オブジェクトなしで直接呼び出すことができます。

class GMLwriter
{
public:
   static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges);
   ^^^^
};

次に、次のように呼び出すことができます。

GMLwriter::write(argv[3], Users, edges);
于 2013-02-11T04:28:38.640 に答える
1

GMLwriterオブジェクトではなく、クラス型です。

メンバー関数を呼び出すには、オブジェクト インスタンスが必要です。

GMLwriter foo;   
foo.write(argv[3], Users, edges);

関数を無料または静的にすることを意図している可能性は十分にありますが、次のようになります。

class GMLwriter{
    public:
    // static member functions don't use an object of the class,
    // they are just free functions inside the class scope
    static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges);
};

// ...
GMLwriter::write(argv[3], Users, edges);

また

bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges);
// ...
write(argv[3], Users, edges);
于 2013-02-11T04:30:01.720 に答える
0

静的メソッドを呼び出し/作成しようとしている可能性があります。

この場合、宣言の前に「static」修飾子を付けることができます。

http://www.functionx.com/cppcli/classes/Lesson12b.htm

于 2013-02-11T04:34:10.440 に答える