首页 > 解决方案 > 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将面临重新定义错误。在 C++ 中处理这个问题的正确方法是什么?

标签: c++

解决方案


您的头文件应该只有声明,如下所示:

简单工厂.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 文件中定义您的函数:

简单工厂.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;
            }
        }

然后您可以将这些文件与您的主文件一起编译,或者将这些文件编译为静态或共享库并将其传递给链接器。


推荐阅读