c++ - 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++ 中处理这个问题的正确方法是什么?
解决方案
您的头文件应该只有声明,如下所示:
简单工厂.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;
}
}
然后您可以将这些文件与您的主文件一起编译,或者将这些文件编译为静态或共享库并将其传递给链接器。
推荐阅读
- reactjs - 如何在反应中仅延迟加载一次
- azure-devops - Azure DevOps 服务器(本地)上传符号 (401) 未经授权
- ignite - Drill 是否可以与 Ignite In-memory DB 一起使用?
- makefile - makefile rules in other rules
- amazon-web-services - 如何构建 AWS CodePipeline 以跨账户将 ECR 容器部署到 ECS Fargate
- palantir-foundry - 是否有用于为 Foundry Magritte / 数据连接代理创建插件的 SDK?
- bash - 使用条件读取文件的每一行以将行存储到 bash 中的另一个文件
- python - 同一 DAG 中相同任务名称但执行日期不同的气流冲突
- wordpress - 无法从 WordPress 网站发送任何电子邮件
- algorithm - 以下短算法的时间复杂度是多少?