Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вызов функций из внешнего модуля
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
d777
Нужна помощь.
Создаю модуль, в котором будут находиться некоторые функции.
CPP файл :
#include <vcl.h>
#pragma hdrstop
#include <Proc.h>
AnsiString SQL_str;



void Procdr::SQL_Formf (AnsiString Login_str);
{
Main->IBLogin->SelectSQL->Clear();
Login_str = Login->edit_login->Text;
SQL_str = "SELECT * FROM CARDS, USERS WHERE (CARDS.CID = USERS.ID) AND (USERS.LOGIN = '";
SQL_str = SQL_str + Login_str;
SQL_str = SQL_str + "')";
Main->IBLogin->SelectSQL->Add(SQL_str);
Main->IBLogin->Open();
Low->Caption = "Staff Department : User Card : " + Main->IBLogin->FieldByName("FULLNAME")->AsString;
}

H файл этого модуля
class Procdr
{
public:
        static void SQL_Formf (AnsiString Login_str);
}

а потом в главном модуле
#include "Proc.h"
...
SQL_Formf(login_text);

получаю
Цитата
[C++ Error] Login_Unit.cpp(111): E2268 Call to undefined function 'SQL_Formf'

почему из главного модуля нельзя обратиться к этой функции ? Объясните в чем проблема пожалуйста.
d777
Вызываю
#include "Proc.h"
...
Procdr::SQL_Formf(login_text);

Получаю
Цитата
[Linker Error] Unresolved external 'Procdr::SQL_Formf(System::AnsiString)' referenced from D:\MYPROJ\B_FILES\LOGIN_UNIT.OBJ
Pasha
Для: d777
Догадка, но:
void Procdr::SQL_Formf (AnsiString Login_str); <--- убери тут;
d777
Для: Pasha
Ошибка всё та же.
Pasha
Для: d777
В хедере:
class Procdr
{
public:
    static void SQL_Formf1(char* str);
};
в CPP:
#include "Proc.h"
void Procdr::SQL_Formf1(char* str)
{
}
, в главном:
Procdr::SQL_Formf1(0);

Скорее всего у тебя в мелочах ошибка. Например, после объявления класса ; нет.
d777
Ошибка была очень глупая. Не был подключен Proc.cpp к проекту. Подключил. Появились другие ошибки, исправил. Теперь это выглядит так :
.CPP
#include <vcl.h>
#pragma hdrstop
#include <Proc.h>
AnsiString SQL_str;



void SQL_Formf (AnsiString Login_str)
{
Main->IBLogin->SelectSQL->Clear();
Login_str = Login->edit_login->Text;
SQL_str = "SELECT * FROM CARDS, USERS WHERE (CARDS.CID = USERS.ID) AND (USERS.LOGIN = '";
SQL_str = SQL_str + Login_str;
SQL_str = SQL_str + "')";
Main->IBLogin->SelectSQL->Add(SQL_str);
Main->IBLogin->Open();
Low->Caption = "Staff Department : User Card : " + Main->IBLogin->FieldByName("FULLNAME")->AsString;
}


.H
class Procdr
{
public:
        static void SQL_Formf (AnsiString Login_str);
}


Появляется все та же ошибка. Хотя теперь ей казалось бы неоткуда браться.
char* ставить вместо AnsiString не хотелось бы.
Цитата
[Linker Error] Unresolved external 'Procdr::SQL_Formf(System::AnsiString)' referenced from D:\MYPROJ\B_FILES\LOGIN_UNIT.OBJ

Мне кажется, это не мелочь. Ошибку линкера сложно назвать мелочью.
Pasha
Для: d777
Ну я же дал рабочий пример. Найди два отличия. Поставь точку с запятой после объявления класса и добавь Procdr:: перед именем функции в cpp.
d777
Для: Pasha
Большое спасибо. Вроде бы пробовал этот вариант, но сейчас ошибки не появляются. Другое дело, что это работает пока не так как надо. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.