Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 07:31   #1
Equilibrium Keeper
 
Регистрация: 09.09.2009
Сообщений: 8
По умолчанию [ILINK32 Error] Error: Unresolved external...

Есть библиотека:
.h
Код:
#include <vcl.h>
 
class EK
{
        private:
        public:
        class A;
};
 
class EK::A
{
        private:
        public:
        class B;
};
 
class EK::A::B
{
        private:
        public:
        UnicodeString Foo(UnicodeString a);
};
.cpp
Код:
#include "eklib.h"
 
UnicodeString EK::A::B::Foo(UnicodeString a)
{
  return "bar";
}

Есть консольное приложение:
.cpp
Код:
#include <vcl.h>
#pragma hdrstop
 
#include <tchar.h>
#include <iostream.h>
#include "eklib.h"
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  LW::System::Environment temp;
  temp.GetVariable("test");
  return 0;
}
При компиляции выдает ошибку:
Код:
[ILINK32 Error] Error: Unresolved external 'EK::A::B::Foo(System::UnicodeString)' referenced from D:\...\FOOCONSOL.OBJ
Почему - ясно. Вместо объявленной:
EK::A::B::Foo(UnicodeString)
...линкер ищет:
EK::A::B::Foo(System::UnicodeString )

Вопрос №1 - почему. Иными словами - где я сглупил/намудрил с вложенными классами и их вызовом?

=================================== =

Я начал писать достаточно объемную библиотеку и хочу структурировать функции в ней, а также быть уверенным, что они не будут конфликтовать с другими. Однако, идея с вложениями не совсем удалась. Во-первых, описанная выше ошибка. Во-вторых, неудобный вызов - каждый раз придется создавать объект класса, чтобы вызвать ту или иную функцию. В Руби, например, были модули, которые не нужно было создавать - они просто были и к ним в любой момент можно было обратиться.

Вопрос №2 - как лучше это сделать? Можно ли вызывать функции класса без создания объекта-экземпляра этого класса?
Equilibrium Keeper вне форума
Старый 12.02.2010, 09:20   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Тот eklib.срр точно подключен к проекту?
Carbon вне форума
Старый 12.02.2010, 12:37   #3
Корвин
Пользователь
 
Аватар для Корвин
 
Регистрация: 07.02.2010
Сообщений: 31
По умолчанию

Я бы уточнил как класы скрешивать
#define true false
У сверхпрограммы будут сверхглюки, ха-ха!
Корвин вне форума
Старый 12.02.2010, 18:12   #4
Equilibrium Keeper
 
Регистрация: 09.09.2009
Сообщений: 8
По умолчанию

Carbon
"eklib.cpp подключать бессмысленно, ибо зачем тогда библиотека?" - Хотел изначально написать я и в этот момент хлопнул себя по лбу. Эврика - я ведь забыл подключить откомпилированную библиотеку! ^_^ Большое спасибо за наводку! Проблема решена.

Корвин
Да, вроде, правильно вложены.
Equilibrium Keeper вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
POLINK: error: Unresolved external symbol '_main'. Malstr Общие вопросы C/C++ 2 26.12.2009 21:47
Ищу причину ошибки: Error in loading DLL, она же Error 48. hozpraktik Microsoft Office Excel 1 19.11.2009 12:39
Что за ошибка - error LNK2001: unresolved external symbol __imp__glVertex3f@12 ? Selestis Общие вопросы C/C++ 2 16.08.2009 19:02
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/main.exe : fatal error LNK11 prefak Win Api 0 19.04.2009 16:51