C ++,将本地定义的结构链接到外部函数

时间:2017-03-22 01:56:08

标签: c++ struct

我的任务是在struct函数中定义main(),但在其他文件中使用它。如果我在头文件中定义struct,我的代码可以工作,但我无法弄清楚如何在struct内定义main()并仍在其给定范围之外使用它。

我现在拥有的例子:

3个文件:main.cppheader.hfunction.cpp

的main.cpp

#include <iostream>
#include "header.h"

using namespace std;

int main()
{
    vector<myStruct> myVec;
    myFunction(myVec);
    return 0;
}

header.h

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include <vector>

using namespace std;

struct myStruct{
    int typeInt;
    string typeString;
    double typeDouble;
    };
void myFunction(vector<myStruct>&);

#endif // HEADER_H_INCLUDED

function.cpp

#include <iostream>
#include <vector>
#include "header.h"

using namespace std;

void myFunction(vector<myStruct>& myVec){
    myVec.push_back(myStruct());
    myVec[0].typeInt=5;
    cout<<myVec[0].typeInt<<endl;
    }

现在,这适用于我需要它做的事情。不幸的是,我告诉我无法在struct myStruct内定义header.h,而是必须在main()的{​​{1}}内进行定义。

我尝试将代码更改为以下代码(main.cpp未更改):

main.cpp v2

function.cpp

header.h v2

#include <iostream>
#include "header.h"

using namespace std;

int main()
{
    struct myStruct{
        int typeInt;
        string typeString;
        double typeDouble;
    };
    vector<myStruct> myVec;
    myFunction(myVec);
    return 0;
}

现在我收到错误: #ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED #include <vector> using namespace std; template <typename myStruct> void myFunction(vector<myStruct>&); #endif // HEADER_H_INCLUDED 第7行error: 'myStruct' was not declared in this scope

如何在function.cpp中使用myStruct,同时仍在function.cpp的{​​{1}}中定义myStruct

1 个答案:

答案 0 :(得分:0)

这种方式使用模板是正确的,这个问题出现在function.cpp中吗?

你试着在header.h中定义函数“myFunction(..)”, 并删除function.cpp,这个程序运行良好。

如果必须在function.cpp中实现该功能,则必须创建模板类。