这块为什么报错?挺急的,帮忙看一下,谢谢!

main.cpp中的int main()一行报错,报错信息是[Error] a function-definition is not allowed here before '{' token

**main.cpp关键代码如下:**:

#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <list>
#include <vector>
#include "include.h"

using namespace std;

int main () {
    //((FileCatalogLoader) catalogLoader).loadCatalog("catalog.txt");
            
    cout << "Welcome to the vending machine" << endl;
    
    //run();
        
    //writeFile("catalog.txt",catalogFormatter.formatCatalog(catalog));
    
    return 0;
}
```

**include.h代码如下:**

#include "Catalog.h"
#include "CatalogLoader.h"
#include "DataCatalogFormatter.h"
#include "DataSalesFormatter.h"
#include "Drink.h"
#include "FileCatalogLoader.h"
#include "Food.h"
#include "OperatorCatalogLoader.h"
#include "Order.h"
#include "OrderItem.h"
#include "Password.h"
#include "Product.h"
#include "Sales.h"
#include "Vault.h"

extern Catalog* catalog;
catalog = Catalog::getSingletonInstance();
extern Sales*  sales;
sales = Sales::getSingletonInstance();
extern Password* pw;
pw = Password::getSingletonInstance();
extern Vault* vault;
vault = Vault::getSingletonInstance();
extern CatalogLoader* catalogLoader;
catalogLoader = FileCatalogLoader::getSingletonInstance();
extern DataSalesFormatter* salesFormatter;
salesFormatter = DataSalesFormatter::getSingletonInstance();
extern DataCatalogFormatter* catalogFormatter;
catalogFormatter = DataCatalogFormatter::getSingletonInstance();

报错情况:
main.cpp中的int main()一行报错,报错信息是[Error] a function-definition is not allowed here before '{' token

对于这个错误,网上查的都是函数中定义函数、缺括号或分号导致的,可是我的代码不存在以上的问题,那是为什么出错呢?

另外,我把头文件#include "include.h"去掉,这块就不报错了,这是为什么呢?

希望有人能帮我解答一下这个问题,非常感谢!

建议:

从最简单的 main() 函数开始写起,把 include.h 也从最简单写起, 每一次都编译。 个人认为是你的 include.h 有一些不标准的写法,导致 main() 那里报错。 

extern Catalog* catalog;
catalog = Catalog::getSingletonInstance();这种写法有问题,catalog没有实际定义。下面的那些同理

那该怎么实际定义呢

你试试把include.h换个名字

 

DataCatalogFormatter* catalogFormatter = DataCatalogFormatter::getSingletonInstance();
extern DataCatalogFormatter* catalogFormatter;

 

先定义加赋初值,再extern

格式错误

以下为部分代码,采纳后留网盘给你全部程序:


class product
{
public:
	string id;//商品编号
	string name;//商品名称
	double in_price;//商品进价
	double out_price;//商品售价
	int count;//商品库存量

	string getid(){return id;}

	virtual void input(string i, string n, double in, double out, int c, string _type, string _quality, float _capacity, float _acid)=0;

	virtual void show(bool op=true)=0;



	virtual void input(ifstream & is)=0;

	virtual void output(ofstream & os)=0;
};

class food:public product
{
public:
	string type;//类型
	string quality;//质量
	virtual void input(string i, string n, double in, double out, int c, string _type, string _quality, float _capacity, float _acid)
	{
		id = i;
		name = n;
		in_price = in;
		out_price = out;
		count = c;
		type = _type;
		quality = _quality;
	}

	virtual void show(bool op=true)
	{
		cout << "商品编号:" << id 
			<< " 名称:" << name
			<< " 类型:" << type
			<< " 质量:" << quality;
		if(op) cout << " 进价:" << in_price;
		cout << " 售价:" << out_price 
			<< " 数量:" << count <<endl;
	}



	virtual void input(ifstream & is)
	{
		string p;
		is >> id >> name>> in_price>> out_price>> count >> type >> quality;
	}

	virtual void output(ofstream & os)
	{
		os << id
			<< " " << name 
			<< " " << in_price 
			<< " " << out_price 
			<< " " << count 
			<< " " << type 
			<< " " << quality <<endl;
	}
};

class drinks:public product
{
public:
	float capacity;//容量
	float acid;//酸度
	virtual void input(string i, string n, double in, double out, int c, string _type, string _quality, float _capacity, float _acid)
	{
		id = i;
		name = n;
		in_price = in;
		out_price = out;
		count = c;
		capacity = _capacity;
		acid = _acid;
	}

	virtual void show(bool op=true)
	{
		cout << "商品编号:" << id 
			<< " 名称:" << name
			<< " 容量:" << capacity
			<< " 酸度:" << acid;
		if(op) cout << " 进价:" << in_price;
		cout << " 售价:" << out_price 
			<< " 数量:" << count <<endl;
	}



	virtual void input(ifstream & is)
	{
		string p;
		is >> id >> name>> in_price>> out_price>> count >> capacity >> acid;
	}

	virtual void output(ofstream & os)
	{
		os << id
			<< " " << name 
			<< " " << in_price 
			<< " " << out_price 
			<< " " << count 
			<< " " << capacity 
			<< " " << acid <<endl;
	}
};