“std::to_string”: 对重载函数的调用不明确
时间: 2023-08-04 16:05:50 浏览: 317
这个错误通常是因为编译器无法确定要调用哪个重载函数,因为传递给函数的参数不够明确。
你可以尝试将传递给 `std::to_string()` 的参数显式转换为正确的类型,或者使用其他可用的重载函数。例如,如果你传递一个整数,你可以使用 `static_cast` 将其转换为 `long long` 类型,然后再调用 `std::to_string()`。
例如:
```
int num = 42;
std::string str = std::to_string(static_cast<long long>(num));
```
这个例子中,我们将 `num` 转换为 `long long` 类型,以便编译器可以确定要调用哪个 `std::to_string()` 的重载函数。
相关问题
没有与参数列表匹配的 重载函数 "std::to_string" 实例
`std::to_string` 是 C++11 引入的一个标准库函数,它将整数、浮点数或者其他支持转换为字符串的类型转换为对应的字符串形式。当你尝试使用 `std::to_string` 时,如果没有显式指定类型的重载版本,可能会遇到找不到匹配的重载函数的错误。
例如,如果你有一个整数并试图调用:
```cpp
int num = 10;
std::string strNum = std::to_string(num); // 这里会期待找到一个接收整数作为参数的 to_string 版本
```
但发现编译器报错,可能的原因是:
- `std::to_string` 只有对基本类型(如 int、float 等)以及一些内置类型有预定义的模板重载,对于自定义类型(比如 struct、class)你需要提供一个转换构造函数或者重载模板版例。
- 如果你的编译器尚未支持 C++11 或更高版本,`std::to_string` 可能不存在。
解决办法包括:
1. 提供一个转换构造函数或成员函数,让你的自定义类型能够自动转换为 `std::string`:
```cpp
class MyClass {
public:
explicit operator std::string() const { return std::to_string(value); }
private:
int value;
};
```
2. 明确指定类型,例如:
```cpp
std::string strNum = std::to_string<int>(num);
```
3. 如果支持,更新你的编译器以使用 C++11 或以上特性。
std::string m_name
引用中的代码演示了C++中构造函数的相互调用。在这个例子中,类`Person`有两个构造函数,一个是默认构造函数,另一个是带有两个参数的构造函数。默认构造函数中调用了带有参数的构造函数,并将参数设为了10和"hh"。在带有参数的构造函数中,将传入的参数分别赋值给了类的私有成员变量`m_age`和`m_name`。这个例子展示了C++中构造函数的重载和相互调用。
引用中的代码展示了一个错误,错误信息是`‘std::__cxx11::string abc::m_string’ is protected within this context`。这个错误的原因是在类`abc`的外部试图访问`m_string`这个受保护的成员变量。在C++中,类的成员变量可以被声明为`public`、`protected`或`private`三种访问权限之一。`public`成员可以在类的外部被访问,`protected`成员只能在类的内部和派生类中被访问,`private`成员只能在类的内部被访问。因此,在引用中的代码中,试图在类`abc`的外部直接访问`m_string`这个受保护的成员变量,导致了编译错误。
阅读全文