0

「関数が宣言されていません」というエラーが表示される理由がわかりません。プログラミングはまだまだ初心者ですが、頑張って学んでいきます!これが私のコードです。あなたが私を助けることができれば、私は本当に素晴らしいでしょう:

#include <iostream>
#include <vector>
#include "szovegkezelo.h"
using namespace std;

int main()
{
    string sz;

    beolvas(sz);
    kiir(sz);


    return 0;
}

ヘッダ:

#ifndef SZOVEGKEZELO_H_INCLUDED
#define SZOVEGKEZELO_H_INCLUDED

#include <iostream>

using namespace std;

class szovegkezelo {
protected:
    string sz;

public:szovegkezelo
    void beolvas(string &sz);
    void kiir(string t);


};

#endif // SZOVEGKEZELO_H_INCLUDED

cpp:

#include "szovegkezelo.h"
#include <iostream>

void szovegkezelo::beolvas(string &sz)
{

    getline(cin, sz);

}
void szovegkezelo::kiir(string t)
{
     cout << "a beadott szoveg: " << t << endl;
     cout << "a string hossza: " << t.size() << endl;
}
4

3 に答える 3

3

見た目から、'main' から 'beolvas' というクラス関数 (メソッド) を呼び出そうとしていますが、クラスに属しているため、そのように呼び出すことはできません。そのインスタンスを作成する必要があります。クラスを作成してそのインスタンスでメソッドを呼び出すか、関数を静的にしてクラスから呼び出します。

最初のオプションは、クラスのインスタンスを作成してから、次のようにクラスのメソッドを呼び出すことです。

int main()
{
    string sz;
    szovegkezelo szov;

    szov.beolvas(sz);
    svoz.kiir(sz);

    return 0;
}

2 番目のオプションは、クラス内の関数を静的にすることです。この方法では、クラスのインスタンスを呼び出す必要がなくなります。

int main()
{
    string sz;

    szov::beolvas(sz);
    svoz::kiir(sz);

    return 0;
}

static void szovegkezelo::beolvas(string &sz)
{

    getline(cin, sz);

}
static void szovegkezelo::kiir(string t)
{
     cout << "a beadott szoveg: " << t << endl;
     cout << "a string hossza: " << t.size() << endl;
}

C ++で静的なことをしてからしばらく経ちましたので、2番目のオプションで何か間違ったことをした場合は修正してください。

于 2012-05-18T02:04:34.503 に答える
2

いくつかのこと:

1) main で のオブジェクトをインスタンス化しておらず、szovegkezeloを呼び出そうとしていますbeolvas。メンバー関数としてbeolvas宣言しているのに、コンパイラはフリー関数を探していますbeolvas

2)public:szovegkezelo何もしないデフォルトのコンストラクターを探している場合は正しくありません。デフォルトのコンストラクトで特定のことをする必要がある場合は szovegkezelo()、ヘッダーのように宣言します。

3)コメントで述べたように using namespace std、ヘッダーファイルやusing namespace

于 2012-05-18T02:07:16.163 に答える
2
  • あなたのtwo or more data types...エラーは、そのパブリックアクセス指定子の後にある...何か...の誤用に起因します。

    これを変える:

    public:szovegkezelo
    

    これに:

    public:
    

    コンストラクターを作成しようとしている場合は、戻り値の型を除いて、他の関数と同様に宣言する必要があります。


  • この関数が正しく宣言されていないため、他のエラーが発生します。

  • それ以外では、クラスの関数を呼び出す前にオブジェクトを作成する必要があります。各オブジェクトには、関数が処理する独自の変数セットがあります。初心者向けの優れた C++ OOP の本を読むことを真剣にお勧めします。

    メインのどこかに、オブジェクトを作成する必要があります。

    szovegkezelo myObject;
    

    次に、それを使用して関数を呼び出します。

    myObject.kiir (sz);
    

  • private最後に、データ メンバーは通常、アクセス指定子を使用して宣言する必要があることに注意してください。protected継承されていない通常のクラスとは何の関係もありません。
于 2012-05-18T02:07:45.580 に答える