C ++私有函数 - 不在此范围错误中

时间:2012-03-07 02:07:04

标签: c++ g++ private

我是C ++的新手,来自Java和C.我的书没有提到私人功能,谷歌的搜索也没有多少。这对我来说应该是微不足道的,但我无法让它发挥作用。

我有这段代码:

#ifndef RUNDATABASE_H
#define RUNDATABASE_H
#include <iostream>
#include <string>

class RunDatabase
{
    public:
        int main();
    protected:
    private:
        bool checkIfProperID(std::string);
};

#endif // RUNDATABASE_H

在另一个档案中:

#include "RunDatabase.h"

int main()
{

    std::string id; // after this, I initialize id

    if(!checkIfProperID(id))
    {
        std::cout << "Improperly formatted student ID, must be numeric" << std::endl;
        break;
    }

}

bool RunDatabase::checkIfProperID(std::string id)
{
    return true;
}

我收到此错误:error: 'checkIfProperID' was not declared in this scope

在Windows 7 64位上使用MinGW g ++ 4.4.1。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

checkIfProperIDRunDatabase的一种方法。这意味着您需要拥有RunDatabase个对象才能调用checkIfProperID

RunDatabase rd;
rd.checkIfProperID(id);
  

我不明白为什么其他功能不在范围内。

这里的“范围”是班级。

RunDatabase::checkIfProperID

注意范围解析运算符::。这意味着该方法属于类,而不属于全局范围。

答案 1 :(得分:1)

与Java不同,C ++允许独立的功能。运行程序时调用的main函数是独立的main,而不是成员main。如果您按如下方式修改cpp文件,则应编译:

int main() {
    RunDatabase rdb;
    rdb.main();
}

RunDatabase::main() {
    // the code of the main function from your post
}

答案 2 :(得分:1)

问题是main未作为RunDatabase的成员实现。

int main()
{

应该是

int RunDatabase::main()
{

然后,您将需要一个main()函数,您的程序将在该函数中开始执行。

还要考虑在开始执行的main函数之后不命名类成员函数,以避免混淆。例如:

class RunDatabase
{
public:
    int execute();
protected:
private:
    bool checkIfProperID(std::string); 
};

int RunDatabase::execute()
{

    std::string id; // after this, I initialize id

    if(!checkIfProperID(id))
    { 
        std::cout << "Improperly formatted student ID, must be numeric" << std::endl;
        break;
    }

}

/// runs when the program starts
int main()
{
    RunDatabase runDatabase;
    runDatabase.execute();
}