Error - C++:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
(阿奔移动页面C++ ErrorError - C++
 
(未显示同一用户的5个中间版本)
第1行: 第1行:
=== undefined reference to pthread_create ===
=== runtime ===
==== stoi ====
// 在字符串数值转换过程中,如果输入了非数值如:- 报错
terminate called after throwing an instance of 'std::invalid_argument'
  what():  stoi
Aborted (core dumped)
==== string.substr ====
# string 截取长度超过了字符串长度
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 1) > this->size() (which is 0)
Aborted (core dumped)
 
==== Unknown memory ====
<nowiki>struct GREAD {
int t;
queue<string> s;
};
map<int, GREAD> MSG;
...
int fd;
MSG[!fd].s.empty() // Unknown memory
!MSG[fd].s.empty() // Correct operation</nowiki>
 
=== compile ===
==== undefined reference to pthread_create ====
  -pthread
  -pthread
==== 在构造函数内初始化引用成员变量 ====
''<small>(错误说明)引用成员变量必须在构造函数的初始化列表(Constructor Initialization List)中进行初始化。这是因为引用一旦被初始化,就不能改变其引用的对象。因此,它必须在声明时就被初始化。(来自[https://developer.aliyun.com/article/1467283 《C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)》])</small>''


=== 在构造函数内初始化引用成员变量 ===
根据下面两段说明,'''确切的说法'''是:引用成员变量之所以必须在构造函数的初始化列表中进行初始化,是因为引用在声明时必须初始化为一个已存在的对象。所以,在构造函数内初始化引用成员变量,报错的是声明时未初始化(int& myRef)。
引用成员变量必须在构造函数的初始化列表(Constructor Initialization List)中进行初始化。这是因为引用一旦被初始化,就不能改变其引用的对象。因此,它必须在声明时就被初始化。(来自[https://developer.aliyun.com/article/1467283 《C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)》])
*引用(reference)是 C++ 中的一个别名,它在声明时必须初始化为一个已存在的对象。一旦初始化,引用就和它所引用的对象绑定在一起,它们共享同一个内存地址
 
*引用本质上是一个常量指针,它只是给一个已存在的对象起了另外一个名字。这个名字一旦确定,就不能再指向其他的对象
根据下面两段说明,更确切的说法是:引用成员变量之所以必须在构造函数的初始化列表中进行初始化,是因为引用在声明时必须初始化为一个已存在的对象。所以,在构造函数内初始化引用成员变量,报错的是声明时未初始化(int& myRef)。
* 引用(reference)是 C++ 中的一个别名,它在声明时必须初始化为一个已存在的对象。一旦初始化,引用就和它所引用的对象绑定在一起,它们共享同一个内存地址
* 引用本质上是一个常量指针,它只是给一个已存在的对象起了另外一个名字。这个名字一旦确定,就不能再指向其他的对象


  <small><nowiki>class MyClass {
  <small><nowiki>class MyClass {
public:
public:
    MyClass(int& ref) {
    MyClass(int& ref) {
        myRef = ref;  // Error
        myRef = ref;  // Error
    }
    }
private:
private:
    int& myRef;
    int& myRef;
};
};
class MyClass {
public:
    MyClass(int& ref) : myRef(ref) {}  // OK
private:
    int& myRef;
};</nowiki></small>


class MyClass {
public:
    MyClass(int& ref) : myRef(ref) {}  // OK
private:
    int& myRef;
};</nowiki></small>
[[分类:Develop]]
[[分类:Develop]]
[[分类:C++]]
[[分类:C++]]

2024年10月6日 (日) 19:52的最新版本

runtime

stoi

// 在字符串数值转换过程中,如果输入了非数值如:- 报错
terminate called after throwing an instance of 'std::invalid_argument'
 what():  stoi
Aborted (core dumped)

string.substr

# string 截取长度超过了字符串长度
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr: __pos (which is 1) > this->size() (which is 0)
Aborted (core dumped)

Unknown memory

struct GREAD {
int t;
queue<string> s;
};
map<int, GREAD> MSG;
...
int fd;
MSG[!fd].s.empty() // Unknown memory
!MSG[fd].s.empty() // Correct operation

compile

undefined reference to pthread_create

-pthread

在构造函数内初始化引用成员变量

(错误说明)引用成员变量必须在构造函数的初始化列表(Constructor Initialization List)中进行初始化。这是因为引用一旦被初始化,就不能改变其引用的对象。因此,它必须在声明时就被初始化。(来自《C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)》)

根据下面两段说明,确切的说法是:引用成员变量之所以必须在构造函数的初始化列表中进行初始化,是因为引用在声明时必须初始化为一个已存在的对象。所以,在构造函数内初始化引用成员变量,报错的是声明时未初始化(int& myRef)。

  • 引用(reference)是 C++ 中的一个别名,它在声明时必须初始化为一个已存在的对象。一旦初始化,引用就和它所引用的对象绑定在一起,它们共享同一个内存地址
  • 引用本质上是一个常量指针,它只是给一个已存在的对象起了另外一个名字。这个名字一旦确定,就不能再指向其他的对象
class MyClass {
 public:
     MyClass(int& ref) {
         myRef = ref;  // Error
     }
 private:
     int& myRef;
 };
 
 class MyClass {
 public:
     MyClass(int& ref) : myRef(ref) {}  // OK
 private:
     int& myRef;
 };