首页 > 解决方案 > 即使存在头文件,也未在此范围内声明函数

问题描述

我正在尝试运行一些测试代码来学习 c++,但我收到一个错误消息,告诉我该reverseDigits函数未在main.cpp范围内声明:

error: 'reverseDigits' was not declared in this scope.

但是#include "Solutions.h"标题包含在 中main.cpp,所以我认为它会在范围内。

我有结帐其他问题,但答案都与包含循环头文件的问题有关,我认为这不是问题所在。

你知道我为什么会看到这个错误吗?

解决方案.h

#ifndef SOLUTION_H
#define SOLUTION_H

class Solution {
public:
    Solution();
    ~Solution();
    int reverseDigits(int x);
};

#endif // SOLUTION_H

解决方案.cpp

#include "Solution.h"
#include <string>

Solution::Solution()
{
}

Solution::~Solution()
{
}

int Solution::reverseDigits(int x) {
    std::string num_string = std::to_string(x);
    std::string reversed_num_string {};
    for (int i = num_string.length() - 1; i > 0; i--) {
        reversed_num_string.push_back(num_string[i]);
    }
    return stoi(reversed_num_string);
}

主文件

#include <iostream>
#include "Solution.h"

int main()
{
    int x {123};
    int result = reverseDigits(x);
    std::cout << result << std::endl;
    return 0;
}

标签: c++

解决方案


您声明reverseDigitsSolution类的成员函数,然后将其定义为Solution(编辑:您已将其更改为匹配声明和定义,但在使用时,您正在尝试使用不合格的函数,而不是Solution对象的成员)。文件中的声明.h是可见的,但 中的定义.cpp是不相关的,对main.cpp.

在类之外声明函数(因为它显然与类无关),它应该可以工作,更改为:

class Solution {
public:
    Solution();
    ~Solution();
};

int reverseDigits(int x); // NOT inside the class definition

我会注意:我根本不知道你为什么要Solution上课。定义reverseDigits不需要它,所以我没有看到重点。如果这是某些自动评估框架的一部分,您将不得不提供更多详细信息


推荐阅读