2

これが本当にばかげている場合は申し訳ありませんが、これを行う方法がわかりません。

私は長年 C# でプログラミングを行ってきました。今日、私は初めて C++ を試してみようと思い、Windows 用の Qt をインストールしました。

Project Euler の問題から結果を出力するコンソール アプリケーションを作成しようとしています。

文字列値をコンソールに出力coutできたので、クラスを作成して、C# で行うのと同じように静的メソッドとして問題を解決しようと考えました...しかし、作成したクラスを呼び出す方法がわかりません。そして、1 時間以上 Web を検索しても、これまでのところ何も役に立ちませんでした。

私は持っている:

#include <iostream>
using namespace std;

void main()
{
    problems p = new problems ();

    std::cout << "Hello" << "\n";
}

これは絶対に機能しません。クラスにアクセスするにはusingorステートメントが必要だからだと思います...include

クラスヘッダー:

#ifndef PROBLEMS_H
#define PROBLEMS_H

class problems
{
public:
    static long problem1();
};

#endif // PROBLEMS_H

およびクラス cpp:

long problems::problem1()
{
        long output = 0;

        for (int i = 1; i < 1000; i++)
            if (i % 3 == 0 || i % 5 == 0)
                output += i;

        return output;
}

クラス宣言でエラーが発生しないので、それは正しいに違いないと思います (もちろん、確かではありません...)。 最終的には、 How can I make this work?problem1()の「Hello」の代わりに出力を印刷したいと思います。main()

4

2 に答える 2

2

これを編集problems::problem1して、メソッドが静的だった元の質問に答えます。

静的メソッドを呼び出すためにインスタンスは必要ありません。

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

void main()
{

    std::cout << problems::problem1() << "\n";
}

非静的メソッドの場合、次のようにします

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

void main()
{
    problems p
    std::cout << p.problem1() << "\n";
}

では動的割り当てが行われていないことに注意してくださいnew。この場合、そうする理由はないようです。

また、関連するヘッダーを含め、実装をコンパイルし、それをメインにリンクする必要があります。これを行う方法は、ビルド システムによって異なります。

C++ では、静的メソッドが実際にクラスに関連していない限り、代わりに非メンバー関数を名前空間内に配置します。

namespace problems
{
  long problem1() { ..... }
}
于 2012-11-20T06:28:39.347 に答える
1

.h ファイルをインクルードし、必要なクラスにアクセスするには#include:

#include "problems.h"

New はポインターを作成するため、ポインターを介してメソッドにアクセスする必要があります。

problems *p = new problems ();
long x = p->problem1();

次のようにアクセスすることもできます。

problems p = problems();
long x = p.problem1();
于 2012-11-20T06:31:45.290 に答える