我是C ++新手。我试图实施一些东西。我的目标很简单:
这是我的标题:
// .h
using namespace std;
class Person;
typedef map<string, Person> DictForPeople;
class Company {
Company();
void setValueForKey(string key, Person value);
Person valueForKey(string key);
private:
DictForPeople _dictForPeople;
};
class Person {
public:
Person();
void setName(string name);
string name();
private:
string _name; // !!!: raise error here
};
和实现(.cpp):
// .cpp
Company::Company(){
}
void Company::setValueForKey(string key, Person value){
_dictForPeople[key] = value;
}
Person Company::valueForKey(string key){
return _dictForPeople[key];
}
Person::Person(){
}
void Person::setName(string name){
_name = name;
}
string Person::name(){
return _name;
}
我试图使用singleton pattern,但它会引发很多编译错误。如何使用string / map的访问器正确声明共享实例?
更新1:
上面的代码引发了一个错误: 未定义模板的隐式实例化&#39; std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;&#39;
环境 Xcode 6 / Mac OS X 10.10 ,LLVM / Clang。我出于某些原因尝试使用C ++而不是Objective-C.
更新2:
我使用Singleton Pattern的实现如下(reference):
// .h
using namespace std;
class Person;
typedef map<string, Person> DictForPeople;
class Company {
static Company& getInstance() { // For Singleton Pattern
static Company instance;
return instance;
}
void setValueForKey(string key, Person value);
Person valueForKey(string key);
private:
Company() {}; // For Singleton Pattern
Company(Company const&); // For Singleton Pattern
void operator=(Company const&); // For Singleton Pattern
DictForPeople _dictForPeople;
};
class Person {
public:
Person();
void setName(string name);
string name();
private:
string _name; // !!!: raise error here
};
此更改会引发更多错误:
Person
移到类声明{{上方}来修复1}}。其他错误与之前引入的消息相同( 未定义模板的隐式实例化&#39; std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;&#39 ; )但在不同的地方。 C ++文件Company
LLVM
utility
更新3:
我忘了提到上面的代码嵌入了template <class _T1, class _T2>
struct _LIBCPP_TYPE_VIS_ONLY pair
{
typedef _T1 first_type;
typedef _T2 second_type;
_T1 first; // <<<-- raise the error here
_T2 second;
// pair(const pair&) = default;
// pair(pair&&) = default;
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR pair() : first(), second() {}
块。
答案 0 :(得分:0)
你的代码对我来说似乎很好。
您是否在头文件中加入了string
和map
?如果是,请同时提供汇编error's
。