将结构向量传递到函数中

passing a vector of structs into a function

本文关键字:函数 结构 向量      更新时间:2023-10-16

在程序中,在头文件中定义了以下结构:

\structs.h
#include <vector>
using std::vector;
using namespace std;
struct cell
{
    double x;
    vector<int> nn;
};

在一个单独的源文件中,我定义了函数:

\functions.cpp
# define _CRT_SECURE_NO_DEPRECATE
# include <stdio.h>
# include <iostream>
# include <math.h>
# include <vector>
# include "structs.h"
using namespace std;
void initial_position(vector<cell>& cluster, int n)
{
    cell tmp;
    for (int i = 0; i < n; i++)
    {
        tmp.x = 1;
        cluster.push_back(tmp);
    }
}

带有头文件:

//functions.h
# include <vector>
using std::vector;
void initial_position(vector<cell>& cluster, int n);

我希望在主脚本中调用此函数:

//main.cpp
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <vector>
#include "functions.h"
#include "structs.h"  
using namespace std;
int main()
{   
    vector <cell> cluster;
    int n = 100;
    initial_position(cluster,n);
    return 0;
}

但收到以下错误:

functions.h(4(:错误 C2065:"单元格":未声明的标识符

functions.h(4(:错误 C2923:"std::vector":"cell"不是参数"_Ty"的有效模板类型参数

functions.h(4(:错误 C3203:"分配器":非专用类模板不能用作模板参数"_Alloc"的模板参数,应为实际类型

main.cpp(14(: 错误 C2664:"void initial_position(std::vector &(":无法将参数 1 从

'std::vector>' 转换为 'std::vector &'

错误的根源是什么? 这一切似乎都得到了很好的定义。

Put

#include "structs.h" 

到 functions.h 中,并使用包含保护保护结构体 .h 和函数 h,例如

#pragma once

如果可用。

add

#include "structs.h" 

进入 functions.h 因为在 functions.h 编译器不知道单元格是什么。

只需交换

#include "functions.h"
#include "structs.h"  

#include "structs.h"  
#include "functions.h"

由于单元格是在 structs.h 中声明的,并且在函数中是必需的。

或者更好的是,在functions.h中包含structs.h

您也不应该在标头中使用命名空间 std,这是不好的做法。它可能会导致一些令人讨厌的难以找到的错误,例如为什么"使用命名空间 std"被认为是不好的做法?