Snažím se ... proto taky opisuji kód a tak dále. znáte to. Ale narazil jsem na problém. Jsou vytvořené tři soubory.
1. CLib.h
2. CLib.cpp
3. CLibTest.cpp
Tyto tři se snažím přeložit, ale hlásí mi to chybu při překladu. A pro mě nepochopitelnou(jak jinak). Neboť když vše Z ClibTest.cpp překopíruji do CLib.cpp a CLibTest.cpp z projektu odstraním tak to vše funguje. Jinak to při překladu hlásí chybu "špatná konverze typů z int* do int". Přikládám zdrojové soubory a tak trochu doufám že mi někdo řekne co je špatně(?)
pozn. Linux 64-bit, CodeBlock Project v c++ kompilovaný gcc
díky za to že se na to někdo podívá
CLib.h
typedef struct CStashTag {
int size; // Velikost každého prvku
int quantity; // Počet prvků (otázka: kde?)
int next; // ukazuje na další voloné místo (???)
// Dynamicky alokkované pole bajtu
unsigned char* storage; // Paměťové místo
} CStash;
void initialize(CStash* s, int size);
void cleanup(CStash* s);
int add(CStash* s, int index);
void* fetch(CStash* s, int index);
int count(CStash* s);
void inflate(CStash* s, int increase);
CLib.cpp
// Clib.cpp
// Implementační soubor vzorové knihovny v C
#include "CLib.h"
#include <iostream>
#include <cassert>
using namespace std;
// Počet prvk, které se mají přidat
// při požadavku na zvětšení alokované paměti
const int increment = 100;
// TATO FUNKCE NEVRACÍ HODNOTU
void initialize(CStash* s, int sz) {
s->size = sz;
s->quantity = 0;
s->storage = 0;
s->next = 0;
}
int add(CStash* s, const void* element) {
if(s->next >= s->quantity) // Zbývá dost místa?
inflate(s, increment);
// Kopírování prvku do paměti,
// začíná se na nejbližším volném místě:
int startBytes = s->next * s->size;
unsigned char* e = (unsigned char*)element;
for(int i = 0; i < s->size; i++)
s->storage[startBytes + i] = e[i];
s->next++;
return(s->next - 1); // Číslo indexu
}
// FUNKCE KTERÁ SLOUŽÍ K PŘÍSTUPU K DATŮM
void* fetch(CStash* s, int index) {
// Kontrola mezí pro indexování:
assert(0 <= index);
if(index >= s-> next)
return 0; // Indikace konce
// Vrací se ukazatel na požadovaný prvek
return &(s->storage[index * s->size]);
}
int count(CStash* s) {
return s->next; // Prvky v CStash
}
void inflate(CStash* s, int increase) {
assert(increase > 0 );
int newQuantity = s->quantity + increase;
int newBytes = newQuantity * s->size;
int oldBytes = s->quantity * s->size;
unsigned char* b = new unsigned char[newBytes];
for(int i = 0; i < oldBytes; i++)
b[i] = s->storage[i];
delete [](s->storage);
s->storage = b;
s->quantity = newQuantity;
}
void cleanup(CStash* s) {
if(s->storage != 0) {
cout << "uvolnění paměti" << endl;
delete []s->storage;
}
}
a CLibTest.cpp
#include "CLib.h"
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
CStash intStash, stringStash;
int i;
int main() {
initialize(&intStash, sizeof(int));
for ( i = 0; i < 100; i++ ) {
add(&intStash, &i); //-- TADY TO HÁZÍ CHYBU
}
return 0;
}