你能帮我在Visual C中解决这些错误吗?我是C新手,我从NetBeans导入了此代码(设计模式工厂)。在NetBeans中,此代码是正确的。但是现在我需要在Microsoft Visual Studio 2010中编译此代码,并且它会生成以下错误:
Creator.h
#pragma once
#include "stdafx.h"
class Creator
{
public:
Product* createObject(int month);
private:
};
错误:
- 错误C2143:语法错误:第行“”前缺少“;”- Product createObject(int month)
- 错误C4430:缺少类型说明符-假定为int。注意:C++不支持default-int on line - Product* createObject(int month);
Creator.cpp
#include "stdafx.h"
Product* Creator::createObject(int month) {
if (month >= 5 && month <= 9) {
ProductA p1;
return &p1;
} else {
ProductB p2;
return &p2;
}
}
错误:
智能感知:声明与“*Creator::createObject(int mesic)”不兼容(在第9行声明-这是:int getString(int n);)
stdafx.h:
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
using namespace std;
#include "Creator.h"
#include "Product.h"
#include "ProductA.h"
#include "ProductB.h"
产品h:
#pragma once
#include "stdafx.h"
class Product
{
public:
virtual string zemePuvodu() = 0;
Product(void);
~Product(void);
};
Product.cpp:
它只有:
#include "stdafx.h"
Product::Product(void)
{
}
Product::~Product(void)
{
}
谢谢你的回答。
1条答案
按热度按时间olmpazwi1#
输入
你没有指定任何
private
成员。至少定义一个,或删除private:
:输入
当你返回一个局部对象的地址时,你将创建一个未定义的行为。这个错误说你声明返回一个
Product
,但是你实际上返回了一个指向Product
的指针。你是不是复制粘贴了什么错误的东西?确保您的声明
符合你的定义
我在这里找不到错误...
编辑
看了你的代码后,我发现了以下错误:
stdafx.h
被太多的包含“毒害”了,特别是using namespace std;
-声明式的,千万不要这样做!!!ProductA
和ProductB
定义构造函数,这是另一个错误void
作为方法/函数的参数,这是C
风格虽然这听起来像是额外的工作,但尽量不要将
namespace std
引入全局名称空间-> revolt fromusing namespace std;
,尤其是在头文件中!如果没有特别的理由创建一个带有预编译头文件的项目(
stdafx.h
和targetver.h
),不要这样做,因为这会使事情变得复杂!)我成功地构建了你的项目,但使用的是Visual Studio 2012 Express。如果你不能从我上传的文件中重新编译这个项目,请查看源文件并复制内容。
我将解决方案上传到我的SkyDrive帐户。