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