passing vector to function c++

后端 未结 6 1021
借酒劲吻你
借酒劲吻你 2020-12-30 15:32

I have a main.cpp test.h and test.cpp> I am trying to pass my vector through so i can use it in test.cpp but i keep getting errors.

   //file: main.cpp
    i         


        
相关标签:
6条回答
  • 2020-12-30 15:50
    1. You should #include <string>.
    2. string name should read std::string name etc. Same goes for std::vector.
    3. You're calling tester() with a vector, yet it expects an array (the two are not interchangeable).
    4. s.sizeof() is incorrect for both an array and a vector; for the latter, use s.size() or, better yet, use an iterator.

    These are just the errors that immediately jump out; there may be more.

    0 讨论(0)
  • 2020-12-30 15:52

    You should fix

    test.h:5: error: âstringâ does not name a type
    

    first, probably by using namespace std; and #include <string>

    0 讨论(0)
  • 2020-12-30 16:06

    Pass it as std::vector<Item *> & (reference to vector) and use iterator to iterate through it.

    0 讨论(0)
  • 2020-12-30 16:08

    A std::vector<T> and T* [] are not compatible types.

    Change your tester() function signature as follows:

    //file: test.cpp
    int tester(const std::vector<Item>& s)   // take a const-reference to the std::vector
                                             // since you don't need to change the values 
                                             // in this function
    {
        for (size_t i = 0; i < s.size(); ++i){
            cout<< s[i]->name<<"  "<< s[i]->address<<endl;
        }
        return 0;
    }
    

    There are several ways you could pass this std::vector<T> and all have slightly different meanings:

    // This would create a COPY of the vector
    // that would be local to this function's scope
    void tester(std::vector<Item*>); 
    
    // This would use a reference to the vector
    // this reference could be modified in the
    // tester function
    // This does NOT involve a second copy of the vector
    void tester(std::vector<Item*>&);
    
    // This would use a const-reference to the vector
    // this reference could NOT be modified in the
    // tester function
    // This does NOT involve a second copy of the vector
    void tester(const std::vector<Item*>&);
    
    // This would use a pointer to the vector
    // This does NOT involve a second copy of the vector
    // caveat:  use of raw pointers can be dangerous and 
    // should be avoided for non-trivial cases if possible
    void tester(std::vector<Item*>*);
    
    0 讨论(0)
  • 2020-12-30 16:11

    A vector is not an array.

    int tester(vector<Item *> &s)
    

    (pass as a reference to avoid copying or if you need to modify)

    You also need to modify your code inside the tester function to work correctly as a vector.

    0 讨论(0)
  • 2020-12-30 16:17

    You are missing includes

    #include <string>
    #include <vector>
    

    and you need to use std::string and std::vector<>. A std::vector is not an array, so you should pass the vector as reference

    int tester(std::vector<Item*> & vec) { //... }
    

    or even as const std::vector<Item*> & if you are not going to modify the passed vector.

    Also, are you sure, that you'll need a vector of pointers? What are you trying to achieve?

    0 讨论(0)
提交回复
热议问题