Błędy przy kopilacji.

Błędy przy kopilacji.
BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Witam ostatnio zaczełem pisać programik nie mój z Thinking in C, było w kodzie kilka błędów ale je wyeliminowałem. Po nich pojawił się inny czy może ktoś powiedzieć oco kaman? [compiler Dev-C++]

In function main': [Linker error] C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to WinMain@16'
collect2: ld returned 1 exit status

Kopiuj
 
typedef struct CStashTag{
	int size;
	int quantity;
	int next;
	int index;
	unsigned char* storage;
	}CStash;
	void initialize(CStash* s, int size);
	void cleanup(CStash* s);
	int add(CStash* s, const void* element);
	void* fetch(CStash* s, int index);
	int count(CStash* s);
	void inflate(CStash* s,int increase);
	
Kopiuj
 
#include "Clib.h"
#include <iostream>
#include <cassert>
using namespace std;
const int increment=100;

void initialize (CStash* s, int sz){
	s->size=sz;
	s->quantity=0;
	s->storage=0;
	s->next=0;
	s->index=0;
}
int add(CStash* s, const void* element) {
	if (s->next >=s->quantity)
	inflate (s, increment);
	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);
	
}
void* fetch(CStash* s,int index)
{
	assert(0<-index);
	if(index >= s->index)
	
	return 0;
	return &(s->storage[index* s->size]);

}
int count(CStash* s){
	return s->next;
	
}
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<<"zwalnianie pamieci"<<endl;
		delete []s->storage;
	}
}
msm
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie masz nigdzie funkcji main (nie uruchomisz tego kodu bezpośrednio) :]

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

a jak skompilować to nie bezpośrednio i gdzie wstawić main()? Chciał bym się poduczyć troche C++, dlatego prosił bym troche jaśniej tłumaczyć.

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
1

zmień środowisko na c::b na przykład. Zacznij od podstaw. Napisz hello world na sam początek (skoro nie wiesz gdzie dać funkcje main())

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
3

Nie dzięki wole to rozklinić, niż bawić się.... zresztą i tak to już przerabiałem c(Ansi) i b(orland Pascal albo inny twór tej firmy), też z książek. Chociaż twoja rada może okazać się cenna, tylko nie wiem dla kogo.

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 260
0

Czyli chcesz być klepaczem kodu? Bo jeśli chcesz coś zrobić bez zrozumienia tego to sorry, programistą nie zostaniesz. Chłopie, jak nie wiesz, jak wywoływać funkcje ani, że jest potrzebna funkcja main(), i bierzesz się za te rzeczy to chyba coś nie tak.

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Klepaczem nie koniecznie, ale póki co większość odpowiedzi to klepanina poza jedną. Nikt konkretnie nie odpowie, a przecież forum do tego jest. Robie to dla własnej przyjemności, kupiłem książkę spox coś mi nie idzie pytam na forum. pozdr.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
blazeyos napisał(a)

Dev-C++
Przed chwilą ściągnąłem niby to najnowszy Dev-C++. Kompilacja przedwczorajsza.
Naprawdę chciałem dać mu szansę.
Standardowa, pełna instalacja. Nic nie zmieniam.
Piszę hello worlda.

  • Denerwujące uzupełnianie nawiasów. (Visual robi to dobrze, QtCreator jeszcze lepiej)
  • Debugowanie nie działa. Bo po co. /zakładam że to GDB jest winny, bo pod QtCreatorem podobne cyrki się czasami dzieją/
  • Edytor się kaszani. Chcę zdjąć breakpointa, a ten zamiast tego zwija blok kodu.
  • Podpowiadanie składni biedackie. Nie interesuje mnie że funkcja jest _CRTIMP __MINGW_COŚTAM _DUPABLADA, kiedy przez to jej nazwa nie mieści się w okienku.
  • Edytor wpadł w jakąś pętlę wstawiając co sekundę nawias albo symbol strzałki w lewo.
    itd.

Jak ty możesz w tym pisać?

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

normalnie na studiach z info, wszystko z C/C++ było pisane w Devie. Tak dr. zalecają z pwr.
Thx za rozjaśnienie

GO
  • Rejestracja: dni
  • Ostatnio: dni
0

Dev to już przeszłość. Na studiach czy w szkołach ciągle go pokazują, a potem ludzie mają jakieś problemy z d**y podczas pisania i nie potrafią sobie z tym poradzić. Nawet nagłówki bibliotek zawartych w Devie mają tyle brakujących definicji, że idzie się pochlastać. Do tego od czasu do czasu potrafi zaliczyć crash z byle powodu (np. wejście w konfiguracje). Azarien słusznie zwrócił uwagę na denerwujące uzupełnianie nawiasów. Kiedyś kombinowałem w konfiguracji jak to dobrze ustawić, i ciągle było coś nie tak. Jak chcesz pisać tylko proste programy konsolowe liczące, wyświetlające coś i ew. wczytujące z klawiatury to Dev może być. Jak coś poważniejszego (np. w przyszłości aplikacje okienkowe) to radzę Ci ściągnąć Visual C++ Express 2010. Uzyskasz tam dodatkowo możliwość kompilowania do x64, wsparcie Unicode itd...

msm
  • Rejestracja: dni
  • Ostatnio: dni
0

To jest biblioteka, musisz ją jakoś wykorzystać - na przykład robiąc taki main:

Kopiuj
int main()
{
    int a = 5, b = 7;
    CStash c;
    initialize(&c, 0);
    add(&c, &a);
    add(&c, &b);
    cout << "Dodany element 1: " << (int*)fetch(&c, 0) << endl;
    cout << "Dodany element 2: " << (int*)fetch(&c, 1) << endl;
    cleanup(&c);
}

Przy okazji, assert(0<=index); a nie assert(0<-index);.

Tak czy inaczej ten kod nie działa, if(index >= s->index) nigdy nie zwróci true bo s->index jest zawsze == 0: na pewno dobrze ten kod przepisałeś?

BL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Masz racje wkradł mi się błąd w kodzie. Wstawiłem też Twój main(), program się uruchomił. Otrzymany komunikat jest na zamieszczonym linku http://imageshack.us/f/442/complt.jpg/ . Dzięki wielkie za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.