【发布时间】:2017-09-11 15:26:14
【问题描述】:
我正在尝试使用此示例代码: https://sourcemaking.com/design_patterns/factory_method/cpp/1 为了使它适用于我尝试改进的程序。 这是我根据文件的代码: VCFReader.h
#pragma once
#include <fstream> // files
#include <locale> // unicode chars and strings
#include <cstdlib> // for exit()
#include <vector> // vector of VCFRecords
#include "VCFRecord.h"
#include "VCFReader3_0.h"
#include "VCFReader2_1.h"
class VCFReader
{
public:
static VCFReader *makeVCFReader(std::wstring version); // factory method
virtual vector<VCFRecord> loadVCFRecordsFromFile(std::wstring pathToFile) = 0;
};
VCFReader.cpp:
#include "VCFReader.h"
VCFReader *VCFReader::makeVCFReader(std::wstring version)
{
if (version == L"VERSION:3.0")
{
return new VCFReader3_0;
}
else if (version == L"VERSION:2.1")
{
return new VCFReader2_1;
}
else
{
std::string throwMessage = "Unsupported version: " + std::string(version.begin(), version.end());
throw throwMessage.c_str();
}
}
VCFReader3_0.h(同VCFReader2_1.h):
#pragma once
#include "VCFReader.h"
class VCFReader3_0 : public VCFReader
{
virtual vector<VCFRecord> loadVCFRecordsFromFile(std::wstring pathToFile);
};
但我收到以下错误:
错误 C2440 'return':无法从 'VCFReader2_1 *' 转换为 'VCFReader *' vcfreader.cpp 11
错误 C2440 'return':无法从 'VCFReader3_0 *' 转换为 'VCFReader *' vcfreader.cpp 7
多次
错误 C2504 'VCFReader':未定义基类 vcfreader2_1.h 5
错误 C2504 'VCFReader':基类未定义 vcfreader3_0.h 5
当我做了一点搜索时,我发现错误 c2504 是由循环定义引起的。但是我想不出一种方法不将基类包含在派生类中,因为它们派生自它,同时如果我不包含派生类在基类中,那么我不能在静态中返回新的派生类功能。 另外 - 为什么我会收到此错误 - C2440 以及如何清除它?
提前感谢您的帮助!
【问题讨论】:
标签: c++ design-patterns methods factory