C ++地图及其内容的问题

时间:2015-12-15 22:25:26

标签: c++ dictionary output

这是相当广泛的,所以提前,如果你通过这个,即使没有答案或解决方案,谢谢你。

所以,我有这个程序是一个基本的社交网络,减去用户界面,其中一个用户由一个Person对象代表,该对象负责维护朋友列表,阻止列表,消息列表和待处理的朋友请求队列。这些列表分别是std::map<std::string, Person>std::map<std::string, Person>std::vector<Message>std::queue<Message>类型,其中两个映射的std::string是用户的串联名字和姓氏以及最后两个容器中的Message和我定义的其他类。我为<<重载了Person运算符,以便打印用户的名字和姓氏,中间有一个空格。出于某种原因,当我打印这些名字时,返回是空的,我不知道为什么。以下代码基本上是正在进行的演练。

我用来测试主类中代码的行:

std::string cFirst ("Chris");
std::string cLast ("Cringle");
SocialNetwork sn;
sn.addUser(cFirst,cLast);

addUser()中的SocialNetwork功能:

void SocialNetwork::addUser(std::string first, std::string last){
std::string name = (first + last);
Person user (first, last);
_users.insert(std::pair<std::string, Person>(name, user));
}

其中_usersSocialNetwork类型的std::map<std::string, Person>上的成员数据。 Person的构造函数是:

Person::Person(std::string first, std::string last){
_first = first;
_last = last;
}

_first_lastPerson上代表用户名字和姓氏的成员数据。然后,返回主课程,sn.addUser(cFirst,cLast);之后:

sn.printUsers();

看起来像:

void SocialNetwork::printUsers(){
std::map<std::string, Person>::iterator it;
it = _users.begin();
while(it != _users.end()){
    cout << it->first << endl;
    cout << it->second << endl;
    it++;
    }
}

使用给定的代码,cout << it->first << endl;的预期输出应该是ChrisCringle,它是。{ cout << it->second << endl;的预期输出应该调用重载的运算符,应该是Chris Cringle,但它只是打印一个空格。任何迹象表明为什么会非常感激。我需要通过参考传递我的参数吗?我已经尝试过这个并且似乎遇到了很多麻烦。如果看起来有些遗漏可能会有所帮助,请随时提出!再次感谢!我知道我可能会在这个长期问题上得到很多抨击,但我认为我不能设法让这个问题变得更加简单。

编辑:重载运算符的代码是:

ostream& operator<<(ostream& os, const Person& per){
os << per._first << " " << per._last;
return os;
}

1 个答案:

答案 0 :(得分:2)

我刚使用了您展示的所有代码:http://ideone.com/mFBxTC

#include <string>
#include <iostream>
#include <map>
using namespace std;

struct Person {
    Person(std::string first, std::string last);
    std::string _first, _last;
};


ostream& operator<<(ostream& os, const Person& per){
    os << per._first << " " << per._last;
    return os;
}


struct SocialNetwork {
    void addUser(std::string first, std::string last);
    std::map<std::string, Person> _users;
    void printUsers();
};


void SocialNetwork::addUser(std::string first, std::string last){
  std::string name = (first + last);
  Person user (first, last);
  _users.insert(std::pair<std::string, Person>(name, user));
}

Person::Person(std::string first, std::string last){
  _first = first;
  _last = last;
}

void SocialNetwork::printUsers(){
std::map<std::string, Person>::iterator it;
it = _users.begin();
while(it != _users.end()){
        cout << it->first << endl;
        cout << it->second << endl;
        it++;
    }
}


int main() {
    std::string cFirst ("Chris");
    std::string cLast ("Cringle");
    SocialNetwork sn;
    sn.addUser(cFirst,cLast);
    sn.printUsers();
    return 0;
}

它工作正常。所以错误在其他地方

这就是为什么在发布调试问题时应该发布SSCCE