未在此作用域中声明函数,即使存在头文件也是如此

Function was not declared in this scope, even though header file is present

本文关键字:存在 文件 作用域 声明 函数      更新时间:2023-10-16

我正在尝试运行一些测试代码来学习 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);
}

主.cpp

#include <iostream>
#include "Solution.h"
int main()
{
    int x {123};
    int result = reverseDigits(x);
    std::cout << result << std::endl;
    return 0;
}

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

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

class Solution {
public:
    Solution();
    ~Solution();
};
int reverseDigits(int x); // NOT inside the class definition

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

除了ShadowRanger的有效建议外,我将重点介绍如何将数据用作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;
}