トップページ⇒tech
1001コメント302KB

C++相談室 part34

■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)vNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0751デフォルトの名無しさんNGNG
質問です。
以下のコード(>>752)をコンパイルすると二つのエラーが出ます。
エラーの内容は下の通りです。

(1) エラー
request for member 'action' in 'sclass()', which is of
non-aggregate type 'SampleClass ()()'
(2) エラー
request for member 'doAction' in 'uc(SampleClass (*)())',
which is of non-aggregate type 'UserClass()(SampleClass (*)())'

この二つのエラーは同じ系統のものかと思いまして、一度に質問させて
いただきました。何かヒントか検索キーワードでも良いので、なぜ
これがエラーになるのか教えていただけないでしょうか。
特に(2)のエラーは納得できません。代替策はあるのでしょうか?

コンパイラ:g++ (GCC) 3.2.2 Red Hat Linux
0752>>750 からの続きNGNG
----------------------------- コードここから
#include <string>
#include <iostream>
using namespace std;

class SampleClass
{
public:
    SampleClass() {}
    void action() {cout << "SampleClass::action" << endl;}
};

class UserClass
{
    SampleClass sc;
public:
    UserClass(SampleClass sc_) : sc(sc_) {}
    void doAction() { sc.action(); }
};

int
main(int argc, char *argv[])
{
    SampleClass sclass();
    // SampleClass sclass; とすればエラーは出ないが、上記のように
    // 宣言しても引数無しのコンストラクタが呼ばれると思ったのですが…
    sclass.action(); // (1) エラー

    UserClass uc(SampleClass());
    uc.doAction(); // (2) エラー
}
----------------------------- コードここまで
■ このスレッドは過去ログ倉庫に格納されています