Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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++_Reference_Pass By Value - Fatal编程技术网

C++ 向量中的结构值在通过值传递时会损坏

C++ 向量中的结构值在通过值传递时会损坏,c++,reference,pass-by-value,C++,Reference,Pass By Value,我有以下简单结构: struct Wire { int start_x; int end_x; int start_y; int end_y; Wire(int sx, int ex, int sy, int ey): start_x(sx), end_x(ex), start_y(sy), end_y(ey) {} }; 我还具有以下打印函数,可以获取std::vector,并从第一项打印出一些值: 这些函数是相同的,不同的是,一个通过值获取参数,另

我有以下简单结构:

struct Wire {
    int start_x;
    int end_x;
    int start_y;
    int end_y;

    Wire(int sx, int ex, int sy, int ey): start_x(sx), end_x(ex), start_y(sy), end_y(ey) {}
};
我还具有以下打印函数,可以获取
std::vector
,并从第一项打印出一些值:

这些函数是相同的,不同的是,一个通过值获取参数,另一个通过引用获取参数

void print_first_wire_value(std::vector<Wire> wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}

void print_first_wire_reference(std::vector<Wire> &wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}
这到底是怎么回事


最小重现性示例 (请原谅这些看似奇怪的名字,这是一个解决编程挑战的开始)

第3天_lib.h

#pragma once
#include <vector>
#include <string>

struct Wire{
    Wire(int sx, int ex, int sy, int ey);
};

std::vector<Wire> populate_wires();

void print_first_wire_value(std::vector<Wire> wires);

void print_first_wire_reference(std::vector<Wire> &wires);
#pragma一次
#包括
#包括
结构线{
导线(int sx、int ex、int sy、int ey);
};
std::vector populate_wires();
无效打印第一个导线值(标准::矢量导线);
无效打印第一导线参考(标准::矢量和导线);
第3天_lib.cpp

#include <vector>
#include <sstream>
#include <iostream>
#include <stdexcept>

struct Wire {
    int start_x;
    int end_x;
    int start_y;
    int end_y;

    Wire(int sx, int ex, int sy, int ey): start_x(sx), end_x(ex), start_y(sy), end_y(ey) {}
};

std::vector<Wire> populate_wires(){
    std::vector<Wire> wires;

    Wire wire1(0, 0, 1003, 0);
    Wire wire2(1003, 0, 1003, -138);
    Wire wire3(1003, 0, 662, -138);

    wires.push_back(wire1);
    wires.push_back(wire2);
    wires.push_back(wire3);

    return wires;
}

void print_first_wire_value(std::vector<Wire> wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}

void print_first_wire_reference(std::vector<Wire> &wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}
#包括
#包括
#包括
#包括
结构线{
int start_x;
int end_x;
int start_y;
int end_y;
连线(intsx,intex,intsy,intey):开始x(sx),结束x(ex),开始y(sy),结束y(ey){}
};
std::向量填充_线(){
矢量线;
电线1(0,0,1003,0);
电线2(1003,01003,-138);
电线3(1003,0662,-138);
电线。推回(电线1);
电线。推回(电线2);
电线。推回(电线3);
回线;
}
无效打印\u第一个\u导线\u值(标准::矢量导线){

std::cout请提供一个看起来有点像未显示的代码中的某些违规行为的名称。我们需要一个名称来进一步帮助您。您的代码中的某个地方有一个错误,该错误可能存在于任何地方。这就是正在发生的事情。如果没有一个名称,任何人都可以剪切/粘贴、运行和复制您的观察结果,那么任何人都无法为您提供太多帮助。@SamVarshavchik我已经更新了我的问题,以包含一个最小的可重复示例这是未定义的行为。显示的代码使用两个完全不同的类“Wire”在两个不同的地方,你希望在一个没有任何类成员的头中定义一个<代码>结构代码> /C++ >,但是在不同的<代码>中定义一个不同的<代码>结构代码> /c>。e> 在标题中连接类,并从所有
.cpp
源文件中包含它。
#include <vector>
#include <sstream>
#include <iostream>
#include <stdexcept>

struct Wire {
    int start_x;
    int end_x;
    int start_y;
    int end_y;

    Wire(int sx, int ex, int sy, int ey): start_x(sx), end_x(ex), start_y(sy), end_y(ey) {}
};

std::vector<Wire> populate_wires(){
    std::vector<Wire> wires;

    Wire wire1(0, 0, 1003, 0);
    Wire wire2(1003, 0, 1003, -138);
    Wire wire3(1003, 0, 662, -138);

    wires.push_back(wire1);
    wires.push_back(wire2);
    wires.push_back(wire3);

    return wires;
}

void print_first_wire_value(std::vector<Wire> wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}

void print_first_wire_reference(std::vector<Wire> &wires){
    std::cout << "(" << wires[0].start_x << ", " << wires[0].start_y << ")" << std::endl;
}
#include "./day3_lib.h"
#include <fstream>
#include <iostream>

int main(){
    std::vector<Wire> wires = populate_wires();

    std::cout << "By value: " << std::endl;
    print_first_wire_value(wires);
    std::cout << "By reference: " << std::endl;
    print_first_wire_reference(wires);
}