[英]The “this declaration has no storage class or type specifier” error in c++
我決定以練習的形式在C ++中實現一些設計模式,並創建了某種項目體系結構,但事實是我希望我的模式駐留在patterns
目錄和不同文件中。 例如SimpleFactoryPattern
應放在simplefactory.h
文件。 代碼如下:
class SimpleAutoFactory {
public:
SimpleAutoFactory() {};
~SimpleAutoFactory() {};
SharedInterfaces::IAuto *getAutoModel(EModel model) {
switch (model) {
case EModel::EFiat:
return new SharedModels::Fiat;
case EModel::ELamborghini:
return new SharedModels::Lamborghini;
case EModel::EMaserati:
return new SharedModels::Maserati;
default: throw CommonExceptions::unknownModelException;
}
}
};
然后,我將這部分內容簡單地包含在main.cpp中,然后運行make && make run
來編譯並執行整個過程。 問題是我的linter產生錯誤,表明它不知道SharedInterfaces
命名空間來自何處,等等。 我懷疑項目的結構一定存在問題。 我是C ++的新手,但據我所知,我們僅在標頭中聲明內容,並在cpps中執行內容。 如果導入,那就是在我的simplefactory.cpp
文件中包含必需的標頭,我simplefactory.cpp
遇到重定義錯誤。 用C ++處理此問題的正確方法是什么?
您的頭文件應該只包含聲明,如下所示:
simplefactory.h:
#pragma once
// here you should also include the header files where your other classes (IAuto, Fiat etc) are declared
class SimpleAutoFactory {
public:
SharedInterfaces::IAuto *getAutoModel(EModel model); // only declaration, no definition
};
然后,在cpp文件中定義函數:
simplefactory.cpp:
#include "simplefactory.h"
SharedInterfaces::IAuto *SimpleAutoFactory::getAutoModel(EModel model) {
switch (model) {
case EModel::EFiat:
return new SharedModels::Fiat;
case EModel::ELamborghini:
return new SharedModels::Lamborghini;
case EModel::EMaserati:
return new SharedModels::Maserati;
default: throw CommonExceptions::unknownModelException;
}
}
然后,您可以將這些文件與主文件一起編譯,也可以將這些文件編譯為靜態或共享庫,然后將其傳遞給鏈接器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.