2013-05-25 204 views
1

請問您可以在Visual C++中幫助我處理這些錯誤嗎?我是C++中的新成員,我從NetBeans中導入了此代碼(設計模式Factory)。在NetBeans中,此代碼是正確的。但現在我需要編譯在Microsoft Visual Studio 2010這個代碼,我這是產生這些錯誤:將NetBeans C++項目導入Visual Studio 2010

Creator.h

#pragma once 

#include "stdafx.h" 


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

錯誤:

  • 錯誤C2143:語法錯誤:缺少「 ;」 ''在線 - 產品 createObject(int month)
  • 錯誤C4430:缺少類型說明符 - 假定爲int。注意:C++不支持在線的default-int - 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; 
    } 
} 

錯誤:

智能感知:聲明是不兼容 「造物主:: CREATEOBJECT(INT梅西奇)」(第9行聲明 - 這就是:產品 createObject(int month);)

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" 

Product.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) 
{ 
} 

感謝您的回答。

+0

您的產品類在哪裏? – taocp

+0

刪除'#include「stdafx.h」'行。代之以放置'class Product;'。這對於使用'Product *'來說已經足夠了。 –

+0

我從Creator中刪除了私人內容,但它不會改變任何內容。 – Mato

回答

1

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; -declarative,決不再這樣! !
  • 你沒有定義ProductAProductB構造,這竟然是另一個錯誤
  • 不要使用void明確作爲參數傳遞給你的方法/函數,這是C風格

雖然這可能聽起來像是額外的工作,儘量不要將namespace std引入全局命名空間 - >避免使用using namespace std;,特別是在頭文件中!

如果沒有特別的理由,以創建預編譯頭項目(stdafx.htargetver.h,不這樣做,因爲它複雜的東西!)

我設法建立你的項目,但使用Visual Studio 2012表現。如果您無法從我的上傳中重新編譯項目,請查看源文件並複製內容。

我將解決方案上傳到我的SkyDrive -account。

如果這對你有幫助,請接受爲答案。

+0

現在我只有3個錯誤和一個警告。錯誤1錯誤C2143:語法錯誤:缺少';' '之前錯誤2錯誤C4430:缺少類型說明符 - 假設爲int。注意:C++不支持default-int -2x和一個警告 - 警告C4183:'createObject':缺少返回類型;假設是一個成員函數返回'int'在線產品createObject(int month);請任何想法嗎?所有項目都在http://mato.secit.sk/ProjektHPSolution.zip。 – Mato

+0

我在stdafx.h中更改了#include「Product.h」和#include「Creator.h」,現在我只有一個錯誤:Error 錯誤C1010:查找預編譯頭時出現意外的文件結尾。你忘了添加'#include'StdAfx.h''到你的源碼? - 在Creator.cpp中的代碼下的空行... – Mato

+0

看起來是一個循環依賴... –

相關問題