Страница 1 из 1

Неизвестная ошибка переода компиляции

Добавлено: 06 окт 2007, 15:54
TrA.i_
Я прогамист среднего класса и начинающий на Сpp. Свою практику на С мне пришлось начать с достаточно большого проекта для одного человека на Срр. Но я столкнулся с ошибками след содержания:
"
[Linker Error] Unresolved external 'HorizontalInit(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\MAINEXEC.OBJ
[Linker Error] Unresolved external 'GetNextHorLine(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\MAINEXEC.OBJ
[Linker Error] Unresolved external 'OutLineInit(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'GetY(tLine)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'VerticalInit(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\MAINEXEC.OBJ
[Linker Error] Unresolved external 'GetNextVerLine(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\MAINEXEC.OBJ
[Linker Error] Unresolved external 'GetX(tLine)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'PolygonToCassette(tPolygon, tCassette&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'HoleLinesInit(_STL::basic_ifstream<char, _STL::char_traits<char> >&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'LineFromFile(_STL::basic_ifstream<char, _STL::char_traits<char> >&, tLine&)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'LineCrossCassette(tCassette, tLine)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'CorrectCassette(tCassette, tLine)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\REALIZATION.OBJ
[Linker Error] Unresolved external 'OutPut(_STL::basic_ofstream<char, _STL::char_traits<char> >&, tCassette)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\COMDESASSEMBLER\MAINEXEC.OBJ
"


Я никак не могу понять в чем проблема.
Еще были неприятности с тем что inline функции использовались в другом модуле. Не могу вспомнить ошибку, но сделав инлайн функции обычными проблема решилась, но сами понимаете, вопрос эффективности остался открыт. Если знаете в чем дело, намекните.

Но приоритетно все таки первый вопрос. Проект должен быть закрыт, а ошибку я обойти не могу. Пожалуйста помогите.
Заранее,спасибо.

Re: Неизвестная ошибка переода компиляции

Добавлено: 11 окт 2007, 11:57
Владмир
Как я понял вы работаете в C++Builder 6.0, так ведь?

Если да, то такая ошибка появляется из-за того, что в заголовочном файле есть обьявление ф-ии ( например 'void HorizontalInit(_STL::basic_ifstream<char, _STL::char_traits<char> >)'), но в исходнике эта функция не используется, её там попусту нет (т.е. Oblect Inspector её не видит) . Такое обычно бывает, после того, как она была удалена/изменена в исходнике (*cpp - файле), но не в заголовке! Либо после того как вы сами её написали и разместили в секции "_Published:", чего делать не советую.

Тут несколько путей:
Либо вы переносите все ваши ф-ии (с которыми возникла эта проблема) в другой раздел ("Public:","Private:"...),
либо возитесь с Oblect Inspector'ом прописывая в нём (вкладка "Events") недостающие ф-ии,
либо если вы работаете с "SCL", происываете: #define _RWSTD_COMPILE_INSTANTIATE.
Хотя возможно есть и другие способы...

З.Ы. А насчёт второй ошибки (с Inline) - вспомните по-конкретней, что за ошибка.

Re: Неизвестная ошибка переода компиляции

Добавлено: 22 окт 2007, 18:57
TrA.i_
Не думаю.
Я выложу содержимое одного из модулей. Не хочу засорять форум исходниками, но посл того как вопрос будет снят, можно будет все это снести.
Программа полностью процедурно орьентирована.

ЭТО_*СРР_ФАЙЛ_МОДУЛЯ



//---------------------------------------------------------------------------


#pragma hdrstop


#include <vcl.h>


//---------------------------------------------------------------------------

#pragma package(smart_init)


#include <stdio.h>
#include "FileWork.h"




//#define TARGET_FILE "C:\\acad_NVF R.sps"



bool IsNumber(char ch)
{
return (ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')||(ch=='0');
}

float GetValFromFile(ifstream &fin)
{char ch;
AnsiString st="";

fin>>ch;
while(!IsNumber(ch))
fin>>ch;

while(IsNumber(ch))
{
st=st+ch;
fin>>ch;
}
if (ch=='.') st=st+',';
fin>>ch;

while(IsNumber(ch))
{
st=st+ch;
fin>>ch;
}

return StrToFloat(st);
}


void LineFromFile(ifstream &fin , tLine &Line)
{
Line.p1.x=GetValFromFile(fin);
Line.p1.y=GetValFromFile(fin);
GetValFromFile(fin);
Line.p2.x=GetValFromFile(fin);
Line.p2.y=GetValFromFile(fin);
GetValFromFile(fin);
fin.ignore(4,'\n')
}


void HorizontalInit(ifstream &FIn)
{
FIn.open(TARGET_FILE);
}


void VerticalInit(ifstream &FIn)
{
FIn.open(TARGET_FILE);
}

tLine GetNextHorLine(ifstream &HorFIn)
{tLine Line;
LineFromFile(HorFIn,Line);
while (!Gorizontal(Line))
LineFromFile(HorFIn,Line);
return Line;
}


tLine GetNextVerLine(ifstream &VerFIn)
{tLine Line;
LineFromFile(VerFIn,Line);
while (!Vertical(Line))
LineFromFile(VerFIn,Line);
return Line;
}

void OutPut(ofstream &FOut,tCassette Cassette)
{
FOut<<'('<<' ';
for (unsigned char i=0; i<Cassette.count; i++)
{
FOut<<Cassette.p<<' ';
}
FOut<<')'<<endl;

}


void OutLineInit(ifstream &FIn)
{
FIn.open(TARGET_FILE);
}

void HoleLinesInit(ifstream &FIn)
{
FIn.open(TARGET_FILE);
}



?????????????А_ЭТО_ЗАГОЛОВОЧНЫЙ_ФАЙЛ????????????????????


//---------------------------------------------------------------------------

#ifndef FileWorkH
#define FileWorkH

#include "Types.h"




void OutPut(ofstream &, tCassette);
tLine GetNextVerLine(ifstream &VerFIn);
tLine GetNextHorLine(ifstream &HorFIn);
void VerticalInit(ifstream &FIn);
void HorizontalInit(ifstream &FIn);
void OutLineInit(ifstream &FIn);
void HoleLinesInit(ifstream &FIn);
void LineFromFile(ifstream &fin , tLine &Line);
//---------------------------------------------------------------------------
#endif


//ПОГЛЯДИТЕ САМИ. Ничего похожего на то, что вы описали. Я хотел бы отправить весь проект, но ограничение по размеру закаченых файлов на форуме. Что думаете?