传递向量作为参考的正确方法是什么

What is the correct way to pass vectors as a reference?

本文关键字:方法 是什么 参考 向量      更新时间:2023-10-16

我正在尝试将向量传递给函数作为引用,以便我可以打印内容。问题是以下编译错误。

Print.h:7:19: error: variable or field ‘print_stuff’ declared void
  void print_stuff(vector<int> &month_mileage);
                   ^~~~~~
Print.h:7:19: error: ‘vector’ was not declared in this scope
Print.h:7:26: error: expected primary-expression before ‘int’
  void print_stuff(vector<int> &month_mileage);
main.cpp: In function ‘int main()’:
main.cpp:20:12: error: ‘print_stuff’ is not a member of ‘Print’
     Print::print_stuff(&month_mileage);
            ^~~~~~~~~~~
Print.cpp:4:19: error: variable or field ‘print_stuff’ declared void
  void print_stuff(vector<int> &month_mileage) {
                   ^~~~~~
Print.cpp:4:19: error: ‘vector’ was not declared in this scope
Print.cpp:4:26: error: expected primary-expression before ‘int’
   void print_stuff(vector<int> &month_mileage) {
                          ^~~

我相信问题可能与我设置文件的方式有关。从我所做的所有研究中,除了在头文件中 #include 之外,我找不到任何对我有帮助的东西。我认为这是不好的做法,但我知道我可能是错的。

[main.cpp] 
 #include "Print.h"
 #include <vector>
 #include <iostream>
 using namespace std;
 using namespace Print;
 int main() {
    int num;
    vector<int> month_mileage(0,12);
     cout << " Please enter your mileage for the past 12 monthsn";
     for( int i = 0; i < 12; i++) {
         cin >> num;
         month_mileage[i] = num;
     }
     Print::print_stuff(month_mileage);

 return 0;
 }
[Print.h]---------------------------------------------------
  0 #ifndef PRINT_H
 #define PRINT_H

 namespace Print {
         void print_stuff(vector<int> &month_mileage);
 };
 #endif
[Print.cpp]---------------------------------------------------
 namespace Print{

         void print_stuff(vector<int> &month_mileage) {
             for(int i = 0; i < 12; i++) {
                     for(int a = 0; a < &month_mileage[i]; a++) {
                             std::cout <<"|";
                     }//END FOR     
                 std::cout <<'n';
             }//END OUTER FOR
         }//END PRINT_STUFF
 }

UPDATED CODE is as follows
[Print.h]--------------------------------------------------- 
#ifndef PRINT_H
#define PRINT_H
#include <vector>
namespace Print {
    void print_stuff(std::vector<int> &month_mileage);
};
#endif
[Print.cpp]---------------------------------------------------
namespace Print{

    void print_stuff(std::vector<int> &month_mileage) {
        for(int i = 0; i < 12; i++) {
            for(int a = 0; a < month_mileage[i]; a++) {
                std::cout <<"|";
            }   
            std::cout <<'n';
        }
    }
}
[main.cpp]---------------------------------------------------
#include "Print.h"
#include <vector>
#include <iostream>
using namespace Print;
int main() {
   int num;
   std::vector<int> month_mileage(0,12);
   std::cout << " Please enter your mileage for the past 12 monthsn";
    for( int i = 0; i < 12; i++) {
        std::cin >> num;
        month_mileage[i] = num;
    }
    Print::print_stuff(month_mileage);

return 0;
}

所以我的问题是我传递引用不正确吗? 还是我设置了头文件?

谢谢

为了解决这个问题,我不得不

列表项

  1. #include <vector>添加到Print.h文件
  2. #include <vector>#include <iostream>添加到Print.cpp
  3. 将引用传递为void print_stuff(std::vector<int> &month_mileage);

请注意,与 C 数组不同,c ++ 类必须像您传递的常规参数一样在它们之前具有和之前,否则它将在传递给它的函数中的堆栈上创建一个副本。

#include<bits/stdc++.h>
using namespace std;
int fun(vector<int> v)
{
    //your code here
}
int main()
{
    vector<int> v;
    int n,x;
    cin>>n;enter code here
    for(int i=1;i<=n;i++)
        v.push_back(x);
    cout<<fun(v); // make it void if you need it void.
}