C++ 功能无法访问

C++ 功能无法访问,c++,C++,我有 //文件BoardInitializer.h #包括 #包括 #包括 #包括 使用名称空间std; 类初始值设定项 { 静态整数*起始; 静态int*测试板; 静态void testBoardInitialize(); } //文件mh.cpp #包括“BoardInitializer.h” int main(int argc,char*argv[]) { testboardinitializer.testBoardInitialize(); 返回0; } 我在mh.cpp中实现了Boa

我有

//文件BoardInitializer.h
#包括
#包括
#包括
#包括
使用名称空间std;
类初始值设定项
{
静态整数*起始;
静态int*测试板;
静态void testBoardInitialize();
}
//文件mh.cpp
#包括“BoardInitializer.h”
int main(int argc,char*argv[])
{
testboardinitializer.testBoardInitialize();
返回0;
}
我在
mh.cpp
中实现了
BoardInitializer::testBoardInitialize

但我得到错误“函数不可访问”。怎么了?

默认情况下,类元素是私有的。写下:

// 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;
}
默认情况下,结构元素是公共的。写下:

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

必须使用
运算符访问静态类元素。

类具有隐式
私有
访问,您需要在方法之前添加显式
公共:
语句。此外,它是一个静态方法,需要使用
操作符进行处理。

您忘记了通过在类定义的开头添加
public:
来公开函数。

默认情况下,类属性是私有的。您必须向您的类添加公共:

< P> C++中的类< /C> >的默认保护级别为私下< /代码> 其他的被
公开
保护
)。那意味着你所有的 成员和您的成员功能是私有的,只能由 该类或朋友的其他成员函数(函数或类) 那一类的

函数main既不是也不是,最终会出现错误

C++提供了一个方便的快捷方式(或C遗留cruft,取决于您的 worldview)称为
struct
,其中默认保护级别为
public

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


应该显示出差异。

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

正如大家所指出的,类成员默认为
private
。 如果您想使其可访问,只需将其
公开

struct BoardInitializer
{
    static int *beginBoard;
    static int *testBoard;
    static void testBoardInitialize();
};
如果仍要保护/抽象/隐藏数据成员(此处为
*beginBoard
testBoard
),只需将函数
公开即可,如:

struct my_struct {
  int my_int;
};

当我写“publicstaticvoidtestboardinitialize();”时,它给了我一个预期的错误:对不起。非常抱歉。我忘了“:”谢谢你的帮助。我应该删除这篇文章吗?@Masoud No。你应该接受答案。这取决于你,但我个人认为有一些答案提到了其他方面。有时候,你得到的答案比你要求的要多;)您可以通过将代码块缩进4个空格来格式化整个代码块(与使用反勾号相反,反勾号更适合单行代码段)。还有更多细节。
class BoardInitializer {
    static int *beginBoard;
    static int *testBoard;
 public:
   static void testBoardInitialize();
}