Закрытая функция C ++ - ошибка не в этой области - PullRequest
0 голосов
/ 07 марта 2012

Я очень новичок в C ++, пришедший из Java и C. В моей книге не упоминаются частные функции, и поиски в Google не часто встречаются.Это должно быть тривиально для меня, но я не могу заставить его работать.

У меня есть этот код:

#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

Использование MinGW g ++ 4.4.1 в 64-разрядной версии Windows 7.

Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 07 марта 2012

В отличие от Java, C ++ поддерживает автономные функции.Функция main, которая вызывается при запуске вашей программы, является автономной main, а не членом main.Если вы измените свой файл cpp следующим образом, все должно скомпилироваться:

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

RunDatabase::main() {
    // the code of the main function from your post
}
1 голос
/ 07 марта 2012

Проблема в том, что main не реализован как член RunDatabase.

int main()
{

должен быть

int RunDatabase::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();
}
1 голос
/ 07 марта 2012

checkIfProperID - это метод RunDatabase.Это означает, что вам нужен объект RunDatabase для вызова checkIfProperID.

RunDatabase rd;
rd.checkIfProperID(id);

Я не понимаю, почему другая функция не находится в области действия.

«Область действия» - это класс.

RunDatabase::checkIfProperID

Обратите внимание на оператор разрешения области действия ::.Это означает, что метод принадлежит классу, а не глобальной области видимости.

...