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++中的公开
和保护
)。那意味着你所有的
成员和您的成员功能是私有的,只能由
该类或朋友的其他成员函数(函数或类)
那一类的
函数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();
}