Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Использование сторонней библиотеки


Автор: Sharkfire 1.1.2010, 15:09
Здравствуйте!
В коде необходимо использовать стороннюю библиотеку :
Код

#include "main.h"
#include "code\include\mgl\mgl.h"
//#include "class_lib.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
mglGraph * gr = new mglGraph();
delete gr;
}
//---------------------------------------------------------------------------


даёт ошибку:

Код

[BCC32 Error] main.cpp(17): E2352 Cannot create instance of abstract class 'mglGraph'
[BCC32 Error] main.cpp(17): E2353 Class 'mglGraph' is abstract because of 'mglGraph::Alpha(bool) = 0'


насколько я понимаю класс mglGraph мне нужно наследовать и создать на его базе свой?
и перезагрузить его конструктор?


Автор: zim22 1.1.2010, 15:27
Цитата(Sharkfire @  1.1.2010,  14:09 Найти цитируемый пост)
насколько я понимаю класс mglGraph мне нужно наследовать и создать на его базе свой?

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

Автор: Sharkfire 1.1.2010, 16:06
Создал отдельный H и CPP файл :

CPP
Код

myGraph::myGraph() : mglGraph()
{


}


H:
Код

#ifndef class_libH
#define class_libH
//---------------------------------------------------------------------------
#include "code\include\mgl\mgl.h"


class myGraph : public mglGraph{
myGraph();
}
//---------------------------------------------------------------------------

#endif


Ошибки:
Код

[BCC32 Error] class_lib.cpp(11): E2352 Cannot create instance of abstract class 'myGraph'
[BCC32 Error] class_lib.cpp(11): E2111 Type 'myGraph' may not be defined here
[BCC32 Error] class_lib.cpp(11): E2136 Constructor cannot have a return type specification


что я не так написал ?


Автор: kemiisto 1.1.2010, 16:08
Цитата(Sharkfire @  1.1.2010,  17:06 Найти цитируемый пост)
что я не так написал ?

А Вы Alpha(bool) переопределили?

Автор: Sharkfire 1.1.2010, 16:25
т.е. я должен "переопределение наследником функций-членов базового класса" ??

Код

class myGraph : public mglGraph{
myGraph();
void Alpha(bool A);
}


Ошибка : [BCC32 Error] class_lib.h(11): E2113 Virtual function 'myGraph::Alpha(bool)' conflicts with base class 'mglGraph'

Автор: kemiisto 1.1.2010, 16:41
Sharkfire, единственно, что могу посоветовать - учите С++. В базовом классе объявление выглядит так:
Код
virtual bool Alpha(bool enable)=0;

Обратите внимание на тип возвращаемого значения.

MathGL, видимо? На будующее - пишите сразу название сторонней библиотеки. smile 

Автор: Sharkfire 1.1.2010, 16:48
Да она самая!! Может уже у кого есть реализованный класс ? Спасибо


Почему он у меня тут ругается?

Код

myGraph::myGraph(void):mglGraph(void)
{


}


[BCC32 Error] class_lib.cpp(11): E2111 Type 'myGraph' may not be defined here

Автор: zim22 1.1.2010, 19:29
Цитата(Sharkfire @  1.1.2010,  15:48 Найти цитируемый пост)
Почему он у меня тут ругается?


Цитата(Sharkfire @  1.1.2010,  15:48 Найти цитируемый пост)
myGraph::myGraph(void):mglGraph(void)


Цитата(kemiisto @  1.1.2010,  15:41 Найти цитируемый пост)
учите С++


Автор: Sharkfire 2.1.2010, 11:38
Извините туплю не спал ...

Код

class myGraph : public mglGraph{
myGraph() : mglGraph() {};
bool Alpha(bool A);

};



правильно ли я переопределяю его методы Alpha ? (там ещё несколько таких же)

Код

myGraph::Alpha(bool A)
{
}

 

Автор: bsa 2.1.2010, 18:46
Sharkfire, нет. ты забыл тип возвращаемого значения во втором примере.

Автор: Sharkfire 2.1.2010, 20:05
Спасибо переопределил все методы какие надо было.


Код

[BCC32 Error] mgl_io.cpp(123): E2089 Identifier 'unRegister' cannot have a type qualifier

Ругается на :
Код

.....
typedef int ptrFunc (const char *, int,int,unsigned char**);
.....
class mglIO
{
......
     int unRegister(mgl_load* nptrLoad, ptrFunc* nptrSave);
.....
};


В хелпе:
Код

A qualifier is not allowed on the following: 

* typedef names 
.....
 

Это из-за того что библиотека писалась в другом компиляторе ? Или я не до понял чего то?

Автор: bsa 3.1.2010, 00:40
Sharkfire, проблема в том, что кто-то не знает языка, на котором пытается программировать. то что ты написал является ошибкой, так как typedef стоит перед декларацией функции. Ты, видимо, хотел определить тип указателя на функцию, это делается несколько иначе:
Код
typedef int (*ptrFunc)(const char *, int,int,unsigned char**);

Автор: Sharkfire 3.1.2010, 12:22
Вообще то это кусок кода не мой! Это MGL при компилировании вот тут наткнулась.... ))) 
Спасибо)

Автор: azesmcar 3.1.2010, 13:22
 smile 
Цитата(kemiisto @  1.1.2010,  16:41 Найти цитируемый пост)
единственно, что могу посоветовать - учите С++. 

Не ожидал от тебя такого совета smile 

Автор: kemiisto 3.1.2010, 14:01
Цитата(azesmcar @  3.1.2010,  14:22 Найти цитируемый пост)
Не ожидал от тебя такого совета smile 

Это называиццо "вырвано из контекста". А так, да, забавно. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)