未在此作用域中声明函数,即使存在头文件也是如此
Function was not declared in this scope, even though header file is present
我正在尝试运行一些测试代码来学习 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;
}
你声明reverseDigits
是Solution
类的成员函数,然后定义它而不将其限定为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;
}
相关文章:
- 将文件复制到自定义位置,存在字符串转换问题
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 确认二进制文件中仅存在 1 和 0
- 生成文件缺少包含路径 尽管路径存在并已定义
- 如何将 pls 文件保存在 QMediaPlaylist 而不是 m3u 中
- 在 Windows 10 下使用 GTest 的 CMake - 致命错误 LNK1104:无法打开文件"gtest.lib",但存在调试"gtestd.lib"
- 文件存在时的最新检查声明生成输入"is missing"
- CUDA opencv 构建失败 - 缺少实际存在的文件
- 如何检查C++中是否存在文件?
- 如果使用非公共类,vtable 是否会在二进制文件中持续存在?
- 如何检查二进制文件中是否存在字符串
- 检查特定目录中是否存在与文件匹配的 abc* 的最佳方法
- ifstream::is_open 返回 true,即使该位置不存在文件也是如此
- qt检查文件中是否存在文件,如果它没有提示用户输入其位置,则将文件复制到程序工作目录
- 几个使用相同原型的共享对象导致错误:数据库中已经存在文件
- 打开包含不存在文件的文件流后不会引发异常
- 如何在 C++ 中检查 Qt 中是否存在文件
- 问题4.8.4如何检查http服务器上是否存在文件
- 在不存在文件损坏风险的情况下覆盖文件
- C++:提升:如何检查工作目录中另一个文件夹中是否存在文件夹