即使存在头文件,也未在此范围内声明函数

时间:2019-01-08 03:09:44

标签: c++

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

error: 'reverseDigits' was not declared in this scope

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

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

您知道我为什么看到此错误吗?

Solution.h

#ifndef SOLUTION_H
#define SOLUTION_H

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

#endif // SOLUTION_H

Solution.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);
}

main.cpp

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

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

2 个答案:

答案 0 :(得分:2)

您已将reverseDigits声明为Solution类的成员函数,然后在不将其限定为Solution成员的情况下对其进行了定义(编辑:自此以来,您已对其进行了更改以匹配声明。和定义,但在使用时,您正在尝试使用不合格的函数,而不是Solution对象的成员)。 .h文件中的声明是可见的,但是.cpp中的定义是不相关的,并且main.cpp不可见。

在类外声明该函数(因为它显然与该类无关),并且应该起作用,更改为:

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

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

我会指出:我完全不知道为什么您拥有Solution类。定义reverseDigits并不是必需的,因此我没有明白这一点。如果这是某些自动化评估框架的一部分,则必须提供更多详细信息

答案 1 :(得分:2)

ShadowRanger's有效的suggestion一起,我将重点介绍如何将数据用作Solution类的一部分并在其上应用函数。

将您的班级重构为

class Solution {
 public:
     Solution(int data);
     ~Solution();
     int reverseDigits();
 private:
     int m_data;
};

Solution::Solution(int data)
{
    m_data = data;
}

Solution::~Solution()
{
}

即使您可以使用std::reverse,也需要解决i>=0上的错误才能拥有自己的反向功能

int Solution::reverseDigits() {
    std::string num_string = std::to_string(m_data);
    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);
}

现在从您的main()调用为

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