Почему эта функция перегрузки не работает? - PullRequest
3 голосов
/ 27 апреля 2010
class CConfFile
{
    public:
        CConfFile(const std::string &FileName);
        ~CConfFile();
        ...
        std::string GetString(const std::string &Section, const std::string &Key);
        void GetString(const std::string &Section, const std::string &Key, char *Buffer, unsigned int BufferSize);
        ...
}

string CConfFile::GetString(const string &Section, const string &Key)
{
    return GetKeyValue(Section, Key);
}

void GetString(const string &Section, const string &Key, char *Buffer, unsigned int BufferSize)
{
    string Str = GetString(Section, Key);     // *** ERROR ***
    strncpy(Buffer, Str.c_str(), Str.size());
}

Почему я получаю ошибку too few arguments to function ‘void GetString(const std::string&, const std::string&, char*, unsigned int)' во второй функции?

Спасибо

Ответы [ 3 ]

11 голосов
/ 27 апреля 2010

Вы не ограничили вторую функцию CConfFile::.Он компилируется как свободная функция, поэтому вызов GetString разрешается сам (рекурсивно), что требует четырех параметров.

3 голосов
/ 27 апреля 2010

Поскольку CConFile::GetString(), как следует из названия, является функцией-членом класса, она не доступна, как вы вызываете ее во второй функции. Другая функция, которую вы объявляете, GetString(), это global .

Вы просто забыли добавить CConFile:: ко второй функции ...

0 голосов
/ 27 апреля 2010

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

...