c++通过引用传递问题
c++ pass by reference issue
如何将对集合的引用传递给另一个类以使该类修改它?尝试直观的方式(即传递和存储引用collection& c
,然后使用该引用进行更新)似乎不起作用:
#include <iostream>
#include <vector>
class Test{
private:
std::vector<int> testvec;
public:
Test(std::vector<int>& vec){
testvec = vec;
}
void add(int i){
testvec.push_back(i);
}
void report(){
std::cout << "testvec has " << testvec.size() << " items" << "n";
for(int i : testvec)
std::cout << i << " ";
if(!testvec.empty())
std::cout << "n";
}
};
int main() {
std::vector<int> myVec;
Test test(myVec);
for(int i = 0; i < 10; i++){
test.add(i);
}
test.report();
std::cout << "n";
std::cout << "myVec has " << myVec.size() << " items" << "n";
for(int i : myVec)
std::cout << i << " ";
return 0;
}
会给我
testvec有10个条目
0 1 2 3 4 5 6 7 8 9
myVec有0项
当您创建Test
对象时,您通过引用传递myVec
,但testvec
实际上是一个值。所以它会复制myVec
在那个时候的值,这是一个空向量。把
std::vector<int> testvec;
std::vector<int>& testvec;
,它会工作。但是你还需要调整构造函数:
Test(std::vector<int>& myVec) : testvec(myVec) {}
注释说明:
由于成员testvec
现在是一个引用,因此它必须指向内存中存在的某个对象。
必须在构造Test
类的实例时初始化,否则testvec
不是有效的引用类型,程序将是病态的。
初始化列表在构造函数体之前触发。它也是为所有成员分配默认值或指定值的地方。对于引用,唯一有效的值是内存中的现有对象(或引用),因此必须显式地告诉引用成员他们必须初始化的值。
。
class A {
int& t;
A(int& T) : t(T) {} // * OK
A(int& T) { t = T; } // ** ill-formed
}
(*)是可以的,因为在调用构造函数body
之前,t
是用T
设置的(**)不可以,因为t
是在初始化列表之后设置的,所以在设置默认值的步骤之后。
它不起作用,因为您使用的是按值传递而不是按引用传递。要在c++中使用引用传递,您的实际参数应该像Test test(& myVec);
,而在函数的接收端,它的参数应该像Test(std::vector<int>* vec)
(在您的情况下,它是构造函数)。总是通过引用传递,必须发送变量的地址,而通过值传递,必须发送变量的实际值。
你应该直接使用
std::vector<int> *testvec;
您要发送的地址为"myVec"
Test test(& myVec);
和构造函数应该像
Test(std::vector<int>* vec) {
testvec = vec;
}
和
的休息testvec.properties();
必须使用
testvec->properties();
那么它肯定会工作。
解决方案链接:http://ideone.com/7DWJ9O
相关文章:
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- Xcode 语义问题引用或以前定义的代码
- C++ 关于指针取消引用的技术问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 棘手的按值传递和按引用递归问题传递
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 取消引用向量时出现问题
- 有关从C++中的不同源文件引用类的问题
- C++:取消引用十六进制值,有点语法问题
- 运行veins_inet示例 - 未定义的引用的 Omnet++ 问题
- C++ - 对 PCM::getInstance() 的未定义引用问题
- 通过键入的引用问题传递函数
- 一个关于继承和引用的C++问题
- 关于引用数组位置的问题
- printf(时差程序)中的引用问题
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- "Field has incomplete type"引用自己的类的问题
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 使用 opencv 和 C++ - 未定义的引用的链接器出现问题