Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中通过引用返回类的向量+;_C++_Class_Vector_Reference_Return - Fatal编程技术网

C++ 在c+中通过引用返回类的向量+;

C++ 在c+中通过引用返回类的向量+;,c++,class,vector,reference,return,C++,Class,Vector,Reference,Return,我有一个函数,它返回一个类的向量: vector<movement> returnMoves(int startx, int starty, int bb[][8], int side){ vector<movement> moves; movement adding; moves.push_back(adding); moves.push_back(adding); //example return moves; } 它给了我一个分段错误,我做错了什么?您正在返回

我有一个函数,它返回一个类的向量:

vector<movement> returnMoves(int startx, int starty, int bb[][8], int side){

vector<movement> moves;
movement adding;
moves.push_back(adding); moves.push_back(adding); //example

return moves;
}

它给了我一个分段错误,我做错了什么?

您正在返回对局部变量的引用。变量
temp1
returnMoves
退出后超出范围,导致未定义的行为。如果要避免复制,只需按如下方式传入要填充的对象:

void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}
void-generateReturnMoves(向量和填充this,int-startx,int-starty,int-bb[][8],int-side){
//添加需要填充的所有移动对象
}
现在,您可以将其用作:

vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);
向量t1;
发电机旋转(t1、startx、starty、bb、1);

您正在返回对局部变量的引用。变量
temp1
returnMoves
退出后超出范围,导致未定义的行为。如果要避免复制,只需按如下方式传入要填充的对象:

void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}
void-generateReturnMoves(向量和填充this,int-startx,int-starty,int-bb[][8],int-side){
//添加需要填充的所有移动对象
}
现在,您可以将其用作:

vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);
向量t1;
发电机旋转(t1、startx、starty、bb、1);

您正在返回对局部变量的引用。变量
temp1
returnMoves
退出后超出范围,导致未定义的行为。如果要避免复制,只需按如下方式传入要填充的对象:

void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}
void-generateReturnMoves(向量和填充this,int-startx,int-starty,int-bb[][8],int-side){
//添加需要填充的所有移动对象
}
现在,您可以将其用作:

vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);
向量t1;
发电机旋转(t1、startx、starty、bb、1);

您正在返回对局部变量的引用。变量
temp1
returnMoves
退出后超出范围,导致未定义的行为。如果要避免复制,只需按如下方式传入要填充的对象:

void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}
void-generateReturnMoves(向量和填充this,int-startx,int-starty,int-bb[][8],int-side){
//添加需要填充的所有移动对象
}
现在,您可以将其用作:

vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);
向量t1;
发电机旋转(t1、startx、starty、bb、1);


您正在引用未定义的指针。
std::vector
已经只是对包含对象的实际内存的引用,因此您的原始代码只是复制引用(如果没有应用NRVO直接在调用方需要的地方构造向量)。这是C++11“移动构造函数/移动赋值”的优点。如果您看到原始正确代码的速度变慢,请使用更好的编译器。
它可以工作,但是这个过程被执行了很多次,而且速度很慢,
您有证据证明它很慢吗?还是你猜它会很慢?另外,如果您确实测量了,您是否测量了程序的优化构建?请注意,在您的情况下,NRVO是不可能的,因为在初始化期间没有创建临时向量。您可以通过初始化来替换赋值吗?最后,如果您没有并且无法获得具有C++11右值引用支持的编译器,请使用
swap
。您正在引用未定义的指针。
std::vector
已经只是对包含对象的实际内存的引用,因此您的原始代码只是复制引用(如果没有应用NRVO直接在调用方需要的地方构造向量)。这是C++11“移动构造函数/移动赋值”的好处。如果您看到原始正确代码的速度变慢,请使用更好的编译器。
它可以工作,但是这个过程被执行了很多次,而且速度很慢,
您有证据证明它很慢?或者您是否猜测它会很慢?此外,如果您确实测量了,您是否测量了程序的优化版本?请注意,NRVO不可能在您的情况下,由于临时向量不是在初始化过程中创建的,所以无法使用。您可以用初始化来替换赋值吗?最后,如果您没有并且无法获得具有C++11右值引用支持的编译器,请使用
swap
。您正在引用未定义的指针。
std::vector
已经只是对实际内存的引用包含对象,因此您的原始代码只是复制引用(如果没有应用NRVO直接在调用方需要的地方构造向量)。这是C++11“移动构造函数/移动赋值”的好处。如果您看到原始正确代码的速度变慢,请使用更好的编译器。
它可以工作,但是这个过程被执行了很多次,而且速度很慢,
您有证据证明它很慢?或者您是否猜测它会很慢?此外,如果您确实测量了,您是否测量了程序的优化版本?请注意,NRVO不可能在您的情况下,由于临时向量不是在初始化过程中创建的,所以无法使用。您可以用初始化来替换赋值吗?最后,如果您没有并且无法获得具有C++11右值引用支持的编译器,请使用
swap
。您正在引用未定义的指针。
std::vector
已经只是对实际内存的引用包含对象,因此您的原始代码只是复制引用(如果没有应用NRVO直接在调用方需要的地方构造向量)。这是C++11“移动构造函数/移动赋值”的好处。如果您看到原始正确代码的速度变慢,请使用更好的编译器。
它可以工作,但是这个过程被执行了很多次,而且速度很慢,
您有证据证明它很慢?或者您是否猜测它会很慢?此外,如果您确实测量了,您是否测量了程序的优化版本?请注意,NRVO不可能在您的情况下,由于临时向量不是在初始化过程中创建的,所以无法执行。您可以用初始化替换赋值吗?最后,如果您没有且无法获得compi