首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在另一个文件中的函数定义中的Struct参数

在另一个文件中的函数定义中的Struct参数
EN

Stack Overflow用户
提问于 2014-02-05 17:43:39
回答 2查看 355关注 0票数 0

我有一个任务,我必须使用不同的文件为我的功能,我不需要使用一个头文件。问题是编译器正在向我显示各种错误。对于我的所有函数,所有的错误都是完全相同的。

这是错误:

1 > 1> SortCompany.cpp 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(1):error C2065:'Elemento‘:未声明的标识符 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(1):error C2146:语法错误:缺失‘) 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(1):error C2182:'SortCompany‘:非法使用'void’类型 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(1):error C2059:语法错误:')‘ 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(2):error C2143:语法错误:缺失';‘{’之前‘ 1>c:\users\emanuel\documents\visual studio 2013\projects\asignacion 1\asignacion 1\sortcompany.cpp(2):error C2447:'{‘:缺少函数头(旧式正式列表?)

(所有档案的错误与上述相同.)

1>生成代码..。==========构建:0成功,1失败,0最新版本,0跳过==========

我有main.cpp,它是主文件(很明显)。主调用"Menu.cpp“,菜单调用其他文件中的所有其他函数。

PD: Elemento[]是一个结构

Menu.cpp代码:

代码语言:javascript
运行
复制
using namespace std;

//these functions are fine
void Closing(ifstream &, ofstream &);
void Opening(ifstream &, ofstream &);

//the problem is here with all these functions
void Registro(Elemento[], int &, ifstream &);
void InfoDealer(Elemento[], int, ofstream &);
void SortCompany(Elemento[], int);
void MayorVentas(Elemento[], int, ofstream &);
void MayorVentasPorMarca(Elemento[], int, ofstream &);



#include "Registro.cpp"
#include "InfoDealer.cpp"
#include "SortCompany.cpp"
#include "MayorVentas.cpp"
#include "MayorVentasPorMarca.cpp"

void Menu()
{
//code here...
}

Registro.cpp:

代码语言:javascript
运行
复制
void Registro(Elemento Dealer[], int &Cantidad, ifstream &entrada)
{
//code here...
}

main.cpp: (此文件为默认文件)。我不应该改变它。)

代码语言:javascript
运行
复制
//include stuff
using namespace std;

const int MAXIMODEALERS = 20;
const int MAXIMOMODELOS = 6;
struct Detail
{
    string ModelName;
    int Sales;
};
typedef Detail Detalle;

struct Element
{
    string   CompanyName;
    Detalle  Modelo[MAXIMOMODELOS];
};
typedef Element Elemento;

Elemento Dealer[MAXIMODEALERS];

int Cantidad;

void Menu(void);


#include "Menu.cpp"

void Opening(ifstream &Entrada, ofstream &Salida)
{
//code
}

void Closing(ifstream &entrada, ofstream &salida)
{
//code
}

int main()
{
    Menu();
    return 0;
}

所有剩余的文件都具有与Registro.cpp相同的结构。

希望你能帮我!如果你需要更多的细节,请索取。

EN

回答 2

Stack Overflow用户

发布于 2014-02-05 17:49:23

您应该在使用类和结构之前转发-声明类和结构。在函数之前添加struct Elemento;。无论如何,如果不至少在某个地方包含ifstream,就不能使用ifstream

票数 0
EN

Stack Overflow用户

发布于 2014-02-06 05:19:41

在翻译单元中使用的每个名称必须首先声明,在使用它的语句之上。例如,函数Registro使用的是名称Elemento。编译器对此一无所知,因此必须首先在某个地方声明它以指定其类型。ifstreamofstream也是如此。此外,我认为您正在尝试链接Menu.cpp和其他文件中所有函数的定义。然后就有麻烦了,因为每个函数都有多个定义,一个定义是在includeMenu.cpp中定义的,另一个定义是在每个源文件中。当您将所有这些链接起来时,您将得到每个函数的两个定义。另外,请注意这是一个糟糕的设计。您不应该使用include .cpp文件。这是NOT,因为不允许您这样做。预处理器不关心您是include.cpp还是.abcdef文件。它们都只是文本文件。有了这个,我的意思是你不应该在你的翻译单元中包括definitions,因为它们会给你带来严重的头痛,这真的是你不能指望的糟糕的设计。这里有一个很好的解释如何组织您的代码。希望这能有所帮助!

需要补充的东西:

我看到你的评论。是的,Element是main.cpp中的defined (未声明)。但是,由于您是单独编译所有这些文件,编译器不知道在翻译单元unless之外存在什么,所以指定它。因此,如果您在使用Element之前不使用它,它就不会知道它的名称。我想你对翻译单位、预处理包括-s、链接、范围、存储时间等概念有一点了解。花点时间去读,一切都会变得更清晰。

如何在文件中成功地组织源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21584542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档