C++ 返回C+中向量元素的复制值+;
我已经搜索了SO和Google 3个小时,但找不到我看到的内容的解决方案C++ 返回C+中向量元素的复制值+;,c++,vector,C++,Vector,我已经搜索了SO和Google 3个小时,但找不到我看到的内容的解决方案 我有一个.CPP向量支持程序,它为一个更大的C程序提供C++功能。我已经有一个queue.cpp工作正常,队列推送并弹出来回传递的值/元素的副本,因此函数和构建的导出工作正常 尝试复制并返回向量中元素的值时出现问题 c文件中的用法 vector_type *temp; ... _Vector_At(VectorHandle, i, temp); if(temp
我有一个.CPP向量支持程序,它为一个更大的C程序提供C++功能。我已经有一个queue.cpp工作正常,队列推送并弹出来回传递的值/元素的副本,因此函数和构建的导出工作正常
尝试复制并返回向量中元素的值时出现问题 c文件中的用法 vector_type *temp;
...
_Vector_At(VectorHandle, i, temp);
if(temp == NULL)
printf("null\n");
printf("Returned %x\n", temp);
.cpp:
typedef结构
{
std::向量q;
pthread_mutex_t mutex;
}载体;
...
int_Vector_At(向量句柄、短索引、向量类型*ptr)
{
向量*q=(向量*)句柄;
if(NULL==q)
{
返回(-1);
}
ptr=q->q[索引];
printf(“测试%x\n”,ptr);
返回(0);
}
控制台输出为
Test <expected memory address>
null
Returned 0
测试
无效的
返回0
我只能在访问器函数中查询ptr指向的值。当ptr的值从.cpp程序返回到.c程序时,它不知何故被擦除了。但是,std::queue可以以完全相同的方式推送和弹出值,这没有任何意义
有人有什么想法吗?谢谢。在c代码中,您正在将
向量类型*temp
传递给函数\u vector\u At
。\u Vector\u At
函数正在将指针的本地副本制作为ptr
,并使用该副本修改值,但它不会按您的意愿返回该值。这是因为它是一个局部变量,它的生命周期在函数的末尾结束。
要解决此问题,可以将指针作为引用或指针传递:
\u Vector\u At(向量句柄、短索引、向量类型*&ptr)
或
\u Vector\u At(Vector\u HANDLE HANDLE,short index,vectory\u type**ptr)
标识符以下划线开头,后跟大写字母,这样我就不会使用它们了。我要把我的完全无能归咎于我正在与之战斗的寒冷。谢谢你的回答,很有道理,不知道我是怎么错过的。今天到此为止。@user3096955:如果这个答案对您有效,您可以将其检查为“已接受”。
Test <expected memory address>
null
Returned 0