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::testBoardInitializemh.cpp. 但我收到错误“功能无法访问”。怎么了?

4

7 回答 7

9

类具有隐式private访问,您需要public:在方法之前添加显式语句。此外,它是一种静态方法,需要使用::运算符来解决。

于 2012-08-24T16:32:01.367 回答
9

classC++ 中a 的默认保护级别是private(其他是publicand protected)。这意味着您的所有成员和您的成员函数都是私有的,并且只能由该类的其他成员函数或该类的朋友(函数或类)访问。

函数 main 两者都不是,您最终会遇到错误。

C++ 提供了一个方便的快捷方式(或 C legacy cruft,取决于你的世界观)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.

如果您仍想保护/抽象/隐藏您的数据成员(此处*beginBoardtestBoard),只需将函数设为public

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

另一种可能性(对于将来来这里的人)是您public在继承时忘记了关键字。也就是说,你应该有class Base: public Derived.

于 2017-11-22T23:44:18.577 回答