Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;,将本地定义的结构链接到外部函数_C++_Struct - Fatal编程技术网

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

C++ C++;,将本地定义的结构链接到外部函数,c++,struct,C++,Struct,我的任务是在我的main()函数中定义struct,但在其他文件中使用它。如果我在头文件中定义了struct,我的代码就可以工作了,但是我不知道如何在main()中定义struct,并且仍然在给定范围之外使用它 我现在拥有的示例: 3个文件:main.cpp、header.h和function.cpp main.cpp 标题.h v2 #如果包含NDEF标题# #定义包含的标题 #包括 使用名称空间std; 模板 void-myFunction(向量&); #endif//包括页眉 现在我收到

我的任务是在我的
main()
函数中定义
struct
,但在其他文件中使用它。如果我在头文件中定义了
struct
,我的代码就可以工作了,但是我不知道如何在
main()
中定义
struct
,并且仍然在给定范围之外使用它

我现在拥有的示例:

3个文件:
main.cpp
header.h
function.cpp

main.cpp 标题.h v2
#如果包含NDEF标题#
#定义包含的标题
#包括
使用名称空间std;
模板
void-myFunction(向量&);
#endif//包括页眉
现在我收到了错误:
错误:
函数.cpp
的第7行未在此范围内声明“myStruct”


如何在
function.cpp
中使用
myStruct
,而在
main.cpp
main()
中仍然定义
myStruct

这样使用模板是正确的,在function.cpp中出现问题,对吗

您尝试在header.h中定义函数“myFunction(..”, 并删除function.cpp,此程序将运行良好


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

不管怎样,要求您执行的操作毫无意义。C++不这样工作。别,别,别,好的,谢谢。我将避免使用
和namepace std
。我之所以使用它,是因为它默认插入到Code::Blocks中。如果该结构仅在main.cpp中定义,那么myFunction不能将它的向量作为parameter@EmilioGarcia@AlgirdasPreidžius在大多数情况下都是推荐的,但是有一些变通方法可以将template.h与template.cpp实现分离。来自同一来源的答案:“……不必将实现放在头文件中,请参阅此答案末尾的替代解决方案。”
#include <iostream>
#include "header.h"

using namespace std;

int main()
{
    vector<myStruct> myVec;
    myFunction(myVec);
    return 0;
}
#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
#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;
    }
#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