Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как выключить использование неймспейса, а именно неймспейса System, в Builder 5 
:(
    Опции темы
Homskiy
Дата 15.6.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



коротко. Есть проект написаный на С, его надо присобачить к проекту который пишется на C++, Builder 5. 
В проекте, который на С, в одном из хидеров есть строчки объявления типов и функции. Эти типы есесно используются в этом проекте. Но они конфликтуют с неймспесом System:
Код

Word   word[MAX_SENTENCE]; 
String * String_create()


ошибки: 
  • Ambiguity between 'Word' and 'System::Word'
  •  Ambiguity between 'String' and 'System::String'

Здесь - http://forum.vingrad.ru/forum/topic-216551.html - мне посоветовали задать этот вопрос в разделе Билдера, вот и спрашиваю. 
Как я понял, есть возможность отключить использование неймспейса System по умолчанию. В опциях проєкта ничего похожего не нашел. 


Я попробовал сделать такое:
Код

// это кусок из главного хидера ("link-includes.h"), в котором просто перечень всех хидеров которые используются в проекте
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
namespace LinkGrammar
{

#include "structures.h"
#include "api-structures.h"   // приведенные выше строчки находятся в этом хидере
#include "api.h"
#include "externs.h"
....
}


и в пустом проекте я добавил 
Код

#include "link-includes.h"

Оно откомпилилось нормально. 
Но когда я добавил вызов некоторых функций из этого проекта, то получил ошибки линкера примерного такого содержания:
Цитата

Unresolved external 'LinkGrammar::...' from ...


Хоть в параметрах проекта я указал директории либов и инклудов, оно их че-то не увидело... Потом я через Add to Project (shift+F11) добавил все си-шники проекта который я юзаю... После чего появилась ошибка в link-includes.h на строчку 
Код

namespace LinkGrammar


Цитата

Declaration syntax error


Вот... Надеюсь вы подскажите как сей гемор обойти.
ЗЫ: этот проект можно скачать здесь - http://www.link.cs.cmu.edu/link/
а здесь - http://www.link.cs.cmu.edu/link/api/index.html -  можно найти простой пример программы с использованием этого проекта, который я пытался скомпелировать... 
PM MAIL   Вверх
Lazin
Дата 15.6.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



паттерн адаптор тебе поможет... smile 
PM MAIL Skype GTalk   Вверх
Homskiy
Дата 15.6.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



уу... Не хочу ошибиться, но паттерны это вроде типа шаблоны проектирования... И как оно тут поможет?.. 
PM MAIL   Вверх
Lazin
Дата 15.6.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



это паттерн, который позволяет преобразовать интерфейс, в данном случае все решается с помощью идиомы pimpl smile 

adapter.h

Код

//С++ интерфейс
class PublicInterface
{
 class impl;
 impl* pimpl_;
public:
 void f1(std::string c);
 void f2(unsigned v);
};


adapter.cpp

Код

#include "adapter.h"
#include "some_c_file.h"

class PublicInterface::impl
{
 void f1(std::string c) {
     ...используем ф-ии из some_c_file.h
 }
 void f2(unsigned v) {
     ...используем ф-ии из some_c_file.h
 }
};

void PublicInterface::f1(std::string c) {pimpl_->f1(c);}
void PublicInterface::f2(unsigned v) {pimpl_->f2(v);}


потом в программе подключаем adapter.h
если не делать интерфейс в виде класса, то можно еще проще, в хэдере объявить функции в срр реализовать их...
PM MAIL Skype GTalk   Вверх
Homskiy
Дата 16.6.2008, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, эта ошибка исчезла smile Только я не понимаю почему smile Надо будет разобраться... 
Теперь линкер матерится неистовым голосом... 
Мож поможет кто..
ошибка стандартная (Unresolved external symbol referenced from module), только я не пойму че она появляется - вроде все правильно делал.
Чужой проект находится в директории
D:\asdf\LINKGRAMPARSER\
его хидеры:
D:\asdf\LINKGRAMPARSER\include\
и си-шные файлы:
D:\asdf\LINKGRAMPARSER\src\
моя прога (с адаптером) находятся тута:
D:\asdf\first\

в этом линк-парсере есть один, главный, хидер - link-includes.h (он содержит перечень почти всех хидеров парсера), его я затулил в срр-шный файл адаптера, как в примере.  В функцию адаптера затулил то, что мне надо (пример с официального сайта этого парсера), и в основной проге проекта (обычная формочка с кнопкой и лейблом) вызываю эту функцию адаптера :
Код

//дальнейший код в онклик кнопочки
PublicInterface P;
char *s;
P.f1(s);  


в настройках проекта (в разделе директорий) я прописал инклуды: 
D:\asdf\LINKGRAMPARSER\include\
(+ на всяк случай)
D:\asdf\LINKGRAMPARSER\src\

и либы:
D:\asdf\LINKGRAMPARSER\src\

После этого линкер нифига не нашел. Тоесть к проекту не добавился ни один си-шный файл. Я добавил их через Add to Project. Ситуация тоже не очень поменялась. 
Открыв класс-эксплорер я смотрю что оно все структуры видит и все функции тоже. Но только декларейшены. А вот реализаций че-то не видит...
После этого я прошелся по всем си-шным файлам и там где было
Код

#include "link-includes.h"

поменял на (ну мож не видит - фиг его знает)
Код

#include "..\\LINKGRAMPARSER\\include\\link-includes.h"


Результат не изменился. 
Что я не так сделал или что надо еще сделать? Подскажите, плз. 
PM MAIL   Вверх
Lazin
Дата 16.6.2008, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



нужно либо скомпилировать Си-шную библиотеку в lib и подключить к проекту, либо подключить к проекту все с файлы библиотеки
1-й вариант предпочтительней
PM MAIL Skype GTalk   Вверх
Homskiy
Дата 17.6.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



фиг. не помогло. Решил запустить под turbo C. Но у того тоже линкер матюкается.. [censored 6], короче.
PM MAIL   Вверх
Homskiy
Дата 17.6.2008, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ура!! Сделал! smile Надо было все си-шные файлы сипипи-шными сделать и поправить чуток smile 
Спасибо всем за внимание smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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