功能无法访问

时间:2012-08-24 16:29:28

标签: c++

我有

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

7 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:7)

C ++中class的默认保护级别为private(带有 其他人是publicprotected)。这意味着你所有的 成员和您的成员函数是私有的,只能通过 该类或朋友的其他成员函数(函数或类) 那个班。

函数main不是,你最终得到了错误。

C ++提供了一个方便的快捷方式(或C传统cruft,取决于你的 worldview)名为struct,其默认保护级别为 public

class my_class {
public:
  int my_int;      
};

struct my_struct {
  int my_int;
};

应该显示差异。

答案 2 :(得分:3)

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

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

默认情况下,struct元素是公共的。写下这个:

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

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

答案 3 :(得分:2)

您忘记通过在课程定义的开头添加public:来公开此功能。

答案 4 :(得分:2)

默认情况下,类属性是私有的。你必须将public:添加到你的班级。

答案 5 :(得分:1)

正如大家所指出的,班级成员默认为SharedPreferences prefs = SharedPreferenceManager.getDefaultSharedPreferences(this); int myValue = prefs.getInt("my value"); 。 如果您想让它可访问,只需将它们private

如果您仍想保护/摘要/隐藏您的数据成员(此处为public*beginBoard),请将功能testBoard设为:

public

答案 6 :(得分:0)

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