修改
*请注意这个话题,因为我在这个论坛上不能再提问了。 编程是我的生命,我因为自动禁止而陷入困境。谢谢(或者我需要主持人的帮助来解决这个问题*
我是c ++的初学程序员,我想基本上返回std::vector
当我调试我的代码时,我得到函数调用缺少参数列表。这是我的简单代码
感谢您的帮助
#include "stdafx.h"
#include <vector>
#include <iostream>
static std::vector<int> returnStaticVector();
static std::vector<int> returnStaticVector(){
std::vector<int> vectorInt = std::vector<int>();
vectorInt.push_back(0);
return vectorInt;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> a = std::vector<int>();
a = returnStaticVector(); // Compile , but error when I try to access to the size of the std::vector
//int size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member
//int size = &a.size; // & Illegal operation
//int& size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member
int* size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member
return 0;
}
答案 0 :(得分:9)
在std::vector
中,size是成员函数,而不是成员变量。你这样使用它:
int size = a.size();
如果没有括号,则表示语法错误。
顺便说一句,你可以做的另一件事就是简化代码:声明这样的向量:
std::vector<int> a;
或者在C ++ 11中
std::vector<int> a{};
这两个都将默认构造向量 - 这适用于任何类类型。
这样做,
std::vector<int> a = std::vector<int>();
不是很好,因为它更长,让你输入两次,而且它复制初始化它而不是默认构造它,这稍微不同,可能效率较低。
答案 1 :(得分:1)
首先要做的事 - 代码中的真正编译问题是因为您使用了 a.size 而不是 a.size()。尝试更改它,代码应该成功编译。
除此之外,我不认为像你所做的那样返回一个矢量是一个好主意。尝试使用调用函数的引用传递向量。这是更好的设计。
如果您仍在考虑按价值回报,请考虑使用Copy elision,这是编译器实施的优化,以防止在许多情况下出现不必要的副本。在许多情况下,它使得按值或按值传递是可行的。
在此处阅读有关复制品的更多信息: -