将结构向量传递给函数

时间:2018-01-17 07:34:27

标签: c++

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

\\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:&#39; cell&#39;:未声明的标识符

     

functions.h(4):错误C2923:&#39; std :: vector&#39;:&#39; cell&#39;不是参数&#39; _Ty&#39;

的有效模板类型参数      

functions.h(4):错误C3203:&#39;分配器&#39;:非专业化的类模板不能用作模板参数的模板参数&#39; _Alloc&#39;,预期a真实的类型

     

main.cpp(14):错误C2664:&#39; void initial_position(std :: vector&amp;)&#39;:无法从&#39; std :: vector&gt;&#39;转换参数1到&#39; std :: vector&amp;&#39;

错误的来源是什么?这一切似乎都很明确。

3 个答案:

答案 0 :(得分:4)

#include "structs.h" 

进入functions.h并用include-guard保护structs.h和functions.h,例如:

#pragma once

如果有的话。

答案 1 :(得分:2)

添加

#include "structs.h" 

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

答案 2 :(得分:-2)

只需交换

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

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

由于单元格是在structs.h中声明的,因此在functions.h中是必需的。

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

你也不应该在标题中使用命名空间std,这是不好的做法。它可能会导致一些令人讨厌的难以发现的bug,例如, Why is "using namespace std" considered bad practice?