簡體   English   中英

C ++中的“此聲明沒有存儲類或類型說明符”錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM