Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с примером, пространства имен 
V
    Опции темы
Ukrajinec
Дата 11.3.2012, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Изучаю С++ по С. Прата. Пишу в VS2010.
Глава 9 "Модели памяти и пространства имен", стр. 419.
namessp.h
Код

namespace pers
{
    const int LEN = 40;
    struct Person
    {
        char fname[LEN];
        char lname[LEN];
    };

    void GetPerson(Person &);
    void ShowPerson(const Person &);
}

namespace Debts
{
    using namespace pers;
    struct Debt
    {
        Person Name;
        double Amount;
    };

    void GetDebt (Debt &);
    void ShowDebt(const Debt &);
    double SumDebts(const Debt ar[], int n);
}


namesp.cpp
Код

#include <iostream>
using namespace std;
#include "namessp.h"

namespace pers
{
    void GetPerson(Person &rp)
    {
        cout << "Enter first name: ";
        cin >> rp.fname;
        cout << "Enter last name: ";
        cin >> rp.lname;
    }
    
    void ShowPerson (const Person &rp)
    {
        cout << rp.lname << " , " << rp.fname;
    }
}
 namespace Debts
 {
     void GetDebt(Debt &rd) 
     {
         GetPerson(rd.Name);
         cout << "Enter debt: ";
         cin >> rd.Amount;
     }

     void ShowDebt(const Debt &rd)
     {
         ShowPerson(rd.Name);
         cout << ": $" << rd.Amount << endl;
     }

     double SumDebts(const Debt ar[], int n)
     {
         double total = 0;
         for (int i=0; i<n; i++)
             total += ar[i].Amount;
         return total;
     }
 }


usenmsp.cpp
Код

#include <iostream>
using namespace std;
#include "namessp.h"

void other(void);
void another(void);

int _tmain(void)
{
    using Debts::Debt;
    using Debts::ShowDebt;
    Debt golf = {{"Benny", "Goatsniff"}, 120.0};
    ShowDebt(golf);
    other();
    another();

    return 0;
}


Выходные данные

Код

1>------ Построение начато: проект: Project2, Конфигурация: Debug Win32 ------
1>Построение начато 11.03.2012 19:10:36.
1>InitializeBuildStatus:
1>  Обращение к "Debug\Project2.unsuccessfulbuild".
1>ClCompile:
1>  usenmsp.cpp
1>LINK : fatal error LNK1561: точка входа должна быть определена
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.57
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Вопрос:

Где проблема кроется? Может VS надо настроить как то или что.. :-/ 
З.Ы.
Сильно не ругайте если что, возможно, то что вы знаете давно, я учу сам и набиваю шишки тоже самостоятельно, просто подскажите как правильно сделать  smile 


Это сообщение отредактировал(а) Ukrajinec - 11.3.2012, 20:46
PM MAIL   Вверх
volatile
Дата 11.3.2012, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Ukrajinec @  11.3.2012,  20:42 Найти цитируемый пост)
Изучаю С++ по С

зачем? что учебников С++ нету?

Цитата(Ukrajinec @  11.3.2012,  20:42 Найти цитируемый пост)
LINK : fatal error LNK1561: точка входа должна быть определена

во первых что это за фигня?:
Цитата(Ukrajinec @  11.3.2012,  20:42 Найти цитируемый пост)
int _tmain(void)

напишите так:
int main() 
или
int _tmain(int argc, TCHAR * argv[])

но проблема не/только/ здесь.
У вас скорей всего вообще не подключена библиотека CRT
А потому в линковщике не установлена, точка входа. (entry-point)

PM MAIL   Вверх
Ukrajinec
Дата 11.3.2012, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



2 volatile 
1) Я С++ изучаю не по С, а по С. Прата (Стивен Прата)
2) Фиг его знает что за фигня..
3) пробывал
с int main ():
Код

1>------ Построение начато: проект: Project2, Конфигурация: Debug Win32 ------
1>Построение начато 11.03.2012 20:15:36.
1>InitializeBuildStatus:
1>  Обращение к "Debug\Project2.unsuccessfulbuild".
1>ClCompile:
1>  usenmsp.cpp
1>usenmsp.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl another(void)" (?another@@YAXXZ) в функции _main
1>usenmsp.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl other(void)" (?other@@YAXXZ) в функции _main
1>D:\Igor\Project2\Debug\Project2.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.62
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

c int _tmain(int argc, TCHAR * argv[]):
Код

1>------ Построение начато: проект: Project2, Конфигурация: Debug Win32 ------
1>Построение начато 11.03.2012 20:16:50.
1>InitializeBuildStatus:
1>  Обращение к "Debug\Project2.unsuccessfulbuild".
1>ClCompile:
1>  usenmsp.cpp
1>d:\igor\project2\project2\usenmsp.cpp(8): error C2061: синтаксическая ошибка: идентификатор "TCHAR"
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.38
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

PM MAIL   Вверх
volatile
Дата 11.3.2012, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Ukrajinec @  11.3.2012,  21:17 Найти цитируемый пост)
 Я С++ изучаю не по С, а по С. Прата (Стивен Прата)

Сомневаюсь что вы изучаете плюсы. Такие декларации, из чистого С
Цитата(Ukrajinec @  11.3.2012,  20:42 Найти цитируемый пост)
void other(void);
void another(void);


Цитата(Ukrajinec @  11.3.2012,  21:17 Найти цитируемый пост)
>usenmsp.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl another(void)" (?another@@YAXXZ) в функции _main
1>usenmsp.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl other(void)" (?other@@YAXXZ) в функции _main

Здесь линкер говорит что не нашел эти функции.
Где они? вы их подключили к проекту?

PM MAIL   Вверх
Dem_max
Дата 12.3.2012, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

Здесь линкер говорит что не нашел эти функции.
Где они? вы их подключили к проекту?


Ну прототипы то объявлены че парится то ?
 smile 

Код

void other(void);
void another(void);

int _tmain(void)
{


Ладно расскажу секрет

нужно сделать так

Код

#include <tchar.h>
#include <iostream>
using namespace std;
#include "namessp.h"

void other(void) {};
void another(void) {};

int _tmain(int argc, _TCHAR* argv[])
{
    using Debts::Debt;
    using Debts::ShowDebt;
    Debt golf = {{"Benny", "Goatsniff"}, 120.0};
    ShowDebt(golf);
    other();
    another();

    return 0;
}



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ukrajinec
Дата 12.3.2012, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Dem_max, volatile, Спасибо, выправил/дописал. 
Код

#include <tchar.h>
#include <iostream>

using namespace std;
#include "namessp.h"

void other(void) {};
void another(void) {};
int _tmain(int argc, _TCHAR* argv[])
{
    using Debts::Debt;
    using Debts::ShowDebt;
    Debt golf = {{"Benny", "Goatsniff"}, 120.0};
    ShowDebt(golf);
    other();
    another();
    return 0;
}
void other(void)
{
    using namespace Debts;
    Person dg = {"Doodles", "Glister"};
    ShowPerson(dg);
    cout << endl;
    Debt zippy[3];
    int i;

    for (i=0; i<3; i++)
        GetDebt(zippy[i]);
    for (i=0; i<3; i++)
        ShowDebt(zippy[i]);

    cout << "Total dabt: $" << SumDebts(zippy, 3) << endl;

    return 0;
}

void another (void)
{
    using pers::Person;
    Person Collector = {"Milo", "Rightsshift"};
    pers::ShowPerson(Collector);
    cout << endl;
    return 0;
}

Прога компилируется НО не работает(.  Говорит не может найти или открыть какой то PBD. Гуглил, что то мне не верится что проблема в сверлильном станке =)) Что это такое и как его прогнать? (
Вот лог:
Код

"Project2.exe": Загружено: "D:\Igor\Project2\Debug\Project2.exe", Символы загружены.
"Project2.exe": Загружено: "C:\Windows\System32\ntdll.dll", Невозможно найти или открыть файл PDB
"Project2.exe": Загружено: "C:\Windows\System32\kernel32.dll", Невозможно найти или открыть файл PDB
"Project2.exe": Загружено: "C:\Windows\System32\KernelBase.dll", Невозможно найти или открыть файл PDB
"Project2.exe": Загружено: "C:\Windows\System32\msvcp100d.dll", Символы загружены.
"Project2.exe": Загружено: "C:\Windows\System32\msvcr100d.dll", Символы загружены.
Программа "[4292] Project2.exe: Машинный код" завершилась с кодом 0 (0x0).


Это сообщение отредактировал(а) Ukrajinec - 12.3.2012, 19:37
PM MAIL   Вверх
Dem_max
Дата 12.3.2012, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



это какие то прибамбахи Visual Studio, я первый раз вижу такое. 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
volatile
Дата 12.3.2012, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
Невозможно найти или открыть файл PDB

PDB - это файл где хранится отладочная информация.
Скорей всего у вас в настройках не стоит создания такового.
Для работы он в принципе не нужен, только для отладки.

Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
exe: Машинный код" завершилась с кодом 0 (0x0).

Судя по сообщениям никаких проблем нет. Программа отработала нормально.
PM MAIL   Вверх
volatile
Дата 13.3.2012, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
void other(void)

уберите вы этот void наконец.
void other()

Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
    return 0;

зачем здесь return, если она void? 

Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
void other(void) {};

а это, имхо, вообще не должно компилиться.
функция имеет два тела, в одном файле.

И еще совет. Уберите пока все неймспейсы. Просто скомпилите хэллоу ворлд.
И когда это скомпилится, и будет работать, вот тогда туда потихоньку дабавляйте изучаемые фичи, типа неймспейсов и проч.

Это сообщение отредактировал(а) volatile - 13.3.2012, 00:37
PM MAIL   Вверх
Ukrajinec
Дата 13.3.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



volatile, Спасибо, сделал. Работает. =)

Значит так,я еще раз погуглил про этот PDB, так как хочется видеть результат работы и вот что нашел:

Цитата
В главном меню Проект->Свойства. Откроется окно Страница свойств ...
Там слева переходим Свойства конфигурации->C/C++-Создание кода.
Теперь справа находим строку Библиотека времени выполнения.
Если у вас отладочная версия, то содержимое строки должно быть Многопоточная DLL с возможностью отладки (/MDd) или Многопоточная с возможностью отладки (/MTd).


Ну или запускать без отладки через Ctrl+F5.
Всё мной проверено - работает, хотя ошибки не исчезают.

Еще на одном ресурсе нашел вот такие слова:

Цитата
.:Slim:., дело в том, что происходит это на чистой студии, без шаманства.
Покопал в инете, вроде нужен пакет отладочных символов. Т.е. Файлы pdb для этих вот трех длл.
Может кто подкинет? У меня они лежат в папке windows/symbols/dll
А то полный пакет весит аж 300мб


Вот насчет этого ничего не нашел. Может плохо искал? :-/

Это сообщение отредактировал(а) Ukrajinec - 13.3.2012, 08:32
PM MAIL   Вверх
xvr
Дата 13.3.2012, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Ukrajinec @  12.3.2012,  19:06 Найти цитируемый пост)
"Project2.exe": Загружено: "C:\Windows\System32\ntdll.dll", Невозможно найти или открыть файл PDB
"Project2.exe": Загружено: "C:\Windows\System32\kernel32.dll", Невозможно найти или открыть файл PDB
"Project2.exe": Загружено: "C:\Windows\System32\KernelBase.dll", Невозможно найти или открыть файл PDB

Файлы ntdll.dll, kernel32.dll и KernelBase.dll - системные. Для них нет отладочной информации. Так что в данном случае эти сообщения вполне нормальны, так и должно быть.

PM MAIL   Вверх
Ukrajinec
Дата 13.3.2012, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



xvr, да знаю, но а вдруг)) Ну  с примером разобрался всем большое спасибо. Удачи!
PM MAIL   Вверх
xvr
Дата 13.3.2012, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Ukrajinec @  13.3.2012,  15:35 Найти цитируемый пост)
xvr, да знаю, но а вдруг

Ну если 'вдруг', то можете скачать пакеты с отладочной инфой с MS и наслаждаться. Но во первых они не маленькие (те самые 300Мб), а во вторых они нужны только если вы собираетесь лезть в потроха системных dll - оно вам надо?

Добавлено через 5 минут и 31 секунду
Вот все об отладке - http://msdn.microsoft.com/en-us/windows/ha...e/gg463009.aspx
А вот собственно символы - http://msdn.microsoft.com/en-us/windows/hardware/gg463028 (те самые 300Мб)


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.