繁体   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