将NetBeans C++项目导入Visual Studio 2010

kjthegm6  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(159)

你能帮我在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)
{
}

谢谢你的回答。

olmpazwi

olmpazwi1#

输入

class Creator
{
 public:
 Product* createObject(int month);
 private:
};

你没有指定任何private成员。至少定义一个,或删除private:

class Creator
{
 public:
 Product* createObject(int month);
 
};

输入

Product* Creator::createObject(int month) {
    if (month >= 5 && month <= 9) {
        ProductA p1;
        return &p1;
    } else {
        ProductB p2;
        return &p2;
    }
}

当你返回一个局部对象的地址时,你将创建一个未定义的行为。这个错误说你声明返回一个Product,但是你实际上返回了一个指向Product的指针。你是不是复制粘贴了什么错误的东西?
确保您的声明

Product* createObject(int month);

符合你的定义

Product* Creator::createObject(int month) { ... }

我在这里找不到错误...

编辑

看了你的代码后,我发现了以下错误:

  • 你的stdafx.h被太多的包含“毒害”了,特别是using namespace std;-声明式的,千万不要这样做!!!
  • 您没有为ProductAProductB定义构造函数,这是另一个错误
  • 不要显式地使用void作为方法/函数的参数,这是C风格

虽然这听起来像是额外的工作,但尽量不要将namespace std引入全局名称空间-> revolt from using namespace std;,尤其是在头文件中!
如果没有特别的理由创建一个带有预编译头文件的项目(stdafx.htargetver.h),不要这样做,因为这会使事情变得复杂!)
我成功地构建了你的项目,但使用的是Visual Studio 2012 Express。如果你不能从我上传的文件中重新编译这个项目,请查看源文件并复制内容。
我将解决方案上传到我的SkyDrive帐户。

相关问题