Я прогамист среднего класса и начинающий на С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 функции использовались в другом модуле. Не могу вспомнить ошибку, но сделав инлайн функции обычными проблема решилась, но сами понимаете, вопрос эффективности остался открыт. Если знаете в чем дело, намекните.
Но приоритетно все таки первый вопрос. Проект должен быть закрыт, а ошибку я обойти не могу. Пожалуйста помогите.
Заранее,спасибо.
Неизвестная ошибка переода компиляции
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Как я понял вы работаете в 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) - вспомните по-конкретней, что за ошибка.
Если да, то такая ошибка появляется из-за того, что в заголовочном файле есть обьявление ф-ии ( например '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) - вспомните по-конкретней, что за ошибка.
Не думаю.
Я выложу содержимое одного из модулей. Не хочу засорять форум исходниками, но посл того как вопрос будет снят, можно будет все это снести.
Программа полностью процедурно орьентирована.
ЭТО_*СРР_ФАЙЛ_МОДУЛЯ
//---------------------------------------------------------------------------
#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
//ПОГЛЯДИТЕ САМИ. Ничего похожего на то, что вы описали. Я хотел бы отправить весь проект, но ограничение по размеру закаченых файлов на форуме. Что думаете?
Я выложу содержимое одного из модулей. Не хочу засорять форум исходниками, но посл того как вопрос будет снят, можно будет все это снести.
Программа полностью процедурно орьентирована.
ЭТО_*СРР_ФАЙЛ_МОДУЛЯ
//---------------------------------------------------------------------------
#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
//ПОГЛЯДИТЕ САМИ. Ничего похожего на то, что вы описали. Я хотел бы отправить весь проект, но ограничение по размеру закаченых файлов на форуме. Что думаете?