5

私は持っています

// file BoardInitializer.h
#include <stdio.h>
#include <tchar.h>
#include <string>
#include <iostream>

using namespace std;
class BoardInitializer
{
    static int *beginBoard;
    static int *testBoard;
    static void testBoardInitialize();
}



// file mh.cpp
#include "BoardInitializer.h"

int main(int argc, char* argv[])
{
    BoardInitializer.testBoardInitialize();
    return 0;
}

で実装BoardInitializer::testBoardInitializeしましたmh.cpp。しかし、「関数にアクセスできません」というエラーが表示されます。どうしたの?

4

7 に答える 7

9

クラスには暗黙的なアクセス権があります。メソッドの前に明示的なステートメントprivateを追加する必要があります。さらに、静的メソッドであり、演算子public:を使用して対処する必要があります。::

于 2012-08-24T16:32:01.367 に答える
9

classC ++でのaのデフォルトの保護レベルはprivate(他はpublicprotected)です。つまり、すべてのメンバーとメンバー関数はプライベートであり、そのクラスの他のメンバー関数またはそのクラスの友達(関数またはクラス)からのみアクセスできます。

関数mainはどちらでもないため、エラーが発生します。

C ++は、と呼ばれる便利なショートカット(または、世界観によってはCのレガシークラフト)を提供します。structデフォルトの保護レベルは publicです。

class my_class {
public:
  int my_int;      
};

また

struct my_struct {
  int my_int;
};

違いを示す必要があります。

于 2012-08-24T16:35:22.827 に答える
5

クラス要素はデフォルトでプライベートです。これを書いてください:

class BoardInitializer
{
public:
    static int *beginBoard;
    static int *testBoard;
    static void testBoardInitialize();
};

構造体要素はデフォルトでパブリックです。これを書いてください:

struct BoardInitializer
{
    static int *beginBoard;
    static int *testBoard;
    static void testBoardInitialize();
};

::静的クラス要素には、演算子を使用してアクセスする必要があります。

于 2012-08-24T16:31:42.177 に答える
3

public:クラス定義の先頭に追加して関数を公開するのを忘れました。

于 2012-08-24T16:32:08.830 に答える
3

クラスプロパティはデフォルトでプライベートです。クラスにpublic:を追加する必要があります。

于 2012-08-24T16:33:22.567 に答える
2

みんなが指摘しているように、クラスのメンバーはデフォルトでですprivate。アクセス可能にしたい場合は、それらを作成してくださいpublic

*beginBoardそれでもデータメンバー(ここと)を保護/抽象化/非表示にする場合は、次のようなtestBoard関数を作成します。public

class BoardInitializer {
    static int *beginBoard;
    static int *testBoard;
 public:
   static void testBoardInitialize();
}
于 2018-02-07T15:21:05.497 に答える
1

もう1つの可能性(将来ここに来る人のために)は、public継承するときにキーワードを忘れたということです。つまり、が必要class Base: public Derivedです。

于 2017-11-22T23:44:18.577 に答える