V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
razrlele
V2EX  ›  C

关于 STL 中 vector 的初始化问题

  •  
  •   razrlele · Aug 5, 2014 · 2274 views
    This topic created in 4283 days ago, the information mentioned may be changed or developed.
    我首先定义了一个结构体
    struct operator{
    int x;
    int y;
    char o;
    }operator;

    然后用vector定义了一个结构体数组
    int N;
    cin >> N;
    vector<operator> a(N);

    然后在一个自定义函数里面把结构体数组当作形参

    void function(vector<operator>& a)

    我知道我错了。。。但是具体错在哪里,求指正。。
    31 replies    2014-08-06 01:05:48 +08:00
    lehui99
        1
    lehui99  
       Aug 5, 2014
    struct operator{
    ...
    }operator;

    变量名和结构体名冲突?
    razrlele
        2
    razrlele  
    OP
       Aug 5, 2014
    @lehui99 应该不是吧,这样好像没有问题啊

    改了一样报错
    lehui99
        3
    lehui99  
       Aug 5, 2014
    @razrlele operator是c++关键字,把operator的地方都改掉先。
    razrlele
        4
    razrlele  
    OP
       Aug 5, 2014
    @lehui99 啊。。这个地方我只是一个示范,代码里面写的不是operator,是operate
    bombless
        5
    bombless  
       Aug 5, 2014
    operator是一个保留字你不能用它做标识符。
    还有你function这个名字也最好改改,因为有个std::function类模板存在于C++11的标准库中。
    acros
        6
    acros  
       Aug 5, 2014
    一楼对的吧。

    struct CA{

    //......

    } ca;


    编译没错啊。
    lehui99
        7
    lehui99  
       Aug 5, 2014
    @razrlele 我改成
    struct operate1{
    int x;
    int y;
    char o;
    }operate2;
    测试了,我这里完全没问题。

    说明你在其他地方错了。
    bombless
        8
    bombless  
       Aug 5, 2014
    话说你定义变量a时那个N是做什么。你是想用std::array而不是std::vector对不对?
    razrlele
        9
    razrlele  
    OP
       Aug 5, 2014
    @bombless
    @acros
    啊啊,准确来说我这里写的是伪代码,我还是把真正的代码贴出来吧
    acros
        10
    acros  
       Aug 5, 2014
    难道楼主是弄混了
    typedef {...} structA;
    struct structA{ ... } ;
    struct { ... } structA;
    这几种?
    bombless
        11
    bombless  
       Aug 5, 2014
    @acros 同疑惑,我开始还在想是不是漏写了typedef
    chmlai
        13
    chmlai  
       Aug 5, 2014
    很久没碰 CPP 了, 好像是:
    vector<struct operator> a;
    或者
    typedef struct operator{...} operator;
    vector<operator> a;
    acros
        14
    acros  
       Aug 5, 2014
    @razrlele
    你取值方法错了···=_=

    你要对元素操作,不是对vector对象操作。
    razrlele
        15
    razrlele  
    OP
       Aug 5, 2014
    @acros 能不能具体一点?
    acros
        16
    acros  
       Aug 5, 2014   ❤️ 1
    @razrlele 传函数前你已经从vector取过值了,函数形参是coor&
    bombless
        17
    bombless  
       Aug 5, 2014
    没发现哪里要用vector,所有的vector那里都要去掉吧。
    lehui99
        18
    lehui99  
       Aug 5, 2014
    @razrlele

    void R(vector<coor>& a)
    {
    if(a.o == 'N')
    a.o = 'E';
    ...

    a是个数组,哪有.o属性……
    至少得加个下标吧,a[i].o
    acros
        19
    acros  
       Aug 5, 2014
    @bombless
    三个函数替换成:
    void L(coor& a)
    void R(coor& a)
    void F(coor& a ,int A, int B)

    这下明白了吧···
    bombless
        20
    bombless  
       Aug 5, 2014
    哦,大概理解这里的逻辑了,给每个操作vector的函数加一个for循环吧。
    razrlele
        21
    razrlele  
    OP
       Aug 5, 2014
    @acros 原来如此!!因为之前如果是int的话形参引用都是vector<int>所以才自以为是的以为结构体也是如此
    razrlele
        22
    razrlele  
    OP
       Aug 5, 2014
    @bombless 我需要动态分配数组,所以才用vector
    bombless
        23
    bombless  
       Aug 5, 2014
    感觉就是少写了一些逻辑…
    yxz00
        24
    yxz00  
       Aug 5, 2014
    先学会看报错再来问问题
    shyrock
        25
    shyrock  
       Aug 5, 2014
    询问错误至少应该把错误贴上来吧。。。
    losincasablanca
        26
    losincasablanca  
       Aug 5, 2014
    实在看不出来还可以单步,看看逻辑哪出错了。
    SErHo
        27
    SErHo  
       Aug 5, 2014
    struct operator{
    ...
    }operator;
    这样定义的化, operator 是一个类型为 struct operator 的值,不是一个类型。
    razrlele
        28
    razrlele  
    OP
       Aug 5, 2014
    @yxz00
    @shyrock
    恩,不好意思,忘记贴报错了,其实就是想问一下vector和结构体一起该怎么用,所以一开始也没有贴源码
    dreamworldcn
        29
    dreamworldcn  
       Aug 5, 2014
    贴一个刚写的

    <script src="https://gist.github.com/dreamworld/2a356a5ee25573aa55be.js"></script>
    canautumn
        31
    canautumn  
       Aug 6, 2014
    @razrlele 你理解的不对吧,这跟int和结构体根本没关系。他的意思是说你传入的是vector<coor>的一个元素的引用,就是coor&,但你定义的形参是vector<coor>& a,编译时会报错说a没有o的成员,因为程序里a是vector<coor>&,而不是coor&
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5603 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 07:26 · PVG 15:26 · LAX 00:26 · JFK 03:26
    ♥ Do have faith in what you're doing.