Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > MFC + VC 2008


Автор: Dr_VOLAND 10.3.2008, 16:45
Всем привет!
Странная проблема: код вроде правильный, а работать не хочет.=)
Я сейчас пользуюсь VC 2008.
Вот код:
Код

void main()
{
    map<city_name,city_xy> db_main;
    map<city_name,city_xy>::iterator Iter1 = db_main.begin();
    fill_db(&db_main);
    cout<<"In database "<<db_main.size()<<" cityes!"<<endl;

    printf("%s",Iter1->first.name);

    cin.get();
    cin.get();
}


И на printf-e ругается:
http://ipicture.ru/Gallery/Viewfull/849932.html

Вот код программы коммивояжера(очень простой):
Код

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <map>
#include <cstring>
using namespace std;

class city_name
{
//private:
    public:
    char name[20];
//public:
    city_name()
    {
        strcpy(name,"");
    }
    city_name(char *s)
    {
        strcpy(name,s);
    }
    char *get()
    {
        return name;
    }
};

class city_xy
{
private:
    int x;
    int y;
public:
    city_xy()
    {
        x=y=0;
    }
    city_xy(int *x1, int *y1)
    {
        x=*x1;
        y=*y1;
    }
    int get_x()
    {
        return x;
    }
    int get_y()
    {
        return y;
    }
};

bool operator<(city_name a, city_name b)
{
    return strcmp(a.get(),b.get()) < 0;
}

void fill_db(map<city_name,city_xy> *db)
{
    char name[20];
    int x,y;
    cout<<"Enter please city's info: | then write 'exit'"<<endl;
    cout<<"City name: ";
    cin>>name;
    while(strcmp(name,"exit")!=0)
    {
        cout<<"City x and y: ";
        cin>>x; cin>>y;
        (*db).insert(pair<city_name,city_xy>(city_name(name),city_xy(&x,&y)));
        cout<<"City name: ";
        cin>>name;
    }
}


Буду рад, любой помощи=)

Автор: Dr_VOLAND 10.3.2008, 17:01
Код

    map<city_name,city_xy> db_main;
    map<city_name,city_xy>::iterator Iter1 = db_main.begin();
    fill_db(&db_main);
    cout<<"In database "<<db_main.size()<<" cityes!"<<endl;

    //printf("%s",Iter1->first.name);
                    printf(" %s ",db_main.begin()->first.name);                

    cin.get();
    cin.get();


Код

Enter please city's info: | then write 'exit'
City name: Kiev
City x and y: 23 34
City name: exit
In database 1 cityes!
Kiev


А вот так работает)) тю.

Автор: Earnest 10.3.2008, 17:58
Конечно, ты ведь сначала получаешь итератор (у пустого мэпа), а потом его заполняешь.
Нужно наоборот. Итераторы- штука не постоянная.

Автор: Dr_VOLAND 11.3.2008, 01:15
Точно.... проглядел!
Спасибо!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)