2012-08-24 94 views
3

功能无法访问

// 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; 
} 

,我在mh.cpp实施BoardInitializer::testBoardInitialize。 但我收到错误“功能无法访问”。怎么了?

+0

是公..? – Inisheer

+0

当我写“public static void testBoardInitialize();”它给了我一个预期的错误: – Masoud

+0

那不是C++语法;) –

回答

7

在C++一个class默认保护等级是private(与 其余为publicprotected)。这意味着您所有的 成员和您的成员函数都是私有的,并且只能由 该类的其他成员函数或该类的朋友(函数或类) 访问。

函数main既不是,你最终的错误。

C++提供了一个方便的快捷方式(或C传统的克鲁夫特,这取决于你 世界观)称为struct,其中默认的保护级别是 public

class my_class { 
public: 
    int my_int;  
}; 

struct my_struct { 
    int my_int; 
}; 

应该表现出的差异。

3

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

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

结构元素默认是公共的。写这篇文章:

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

静态类元素必须用::操作符访问。

8

类有隐含的private访问,您需要在您的方法之前添加一个明确的public:语句。此外,它是一种静态方法,需要使用::运营商来解决。

2

您忘了在类定义的开始处添加public:来公开该功能。

2

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

0

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

1

正如大家指出的,班级成员默认为private。 如果你想使它可访问,只需让他们public

如果你仍然想保护/抽象/隐藏您的数据成员(在此*beginBoardtestBoard)只是使的功能等public

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

你可以通过用4个空格缩进整个代码块(而不是使用反引号,这对单行代码片段更好)。有更多的细节[这里](https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)。 –