Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dzielenie kodu na części

Ostatnio zmodyfikowano 2010-05-22 15:50
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++] Dzielenie kodu na części
» 2010-05-21 20:43:06
A więc tak, stworzyłem plik o nazwie "Cos.h" i powiedzmy umieściłem w nim coś takiego
C/C++
#ifndef COS_H
#define COS_H
#include <windows.h>
#include <mmsystem.h>
namespace Cos
{
    void Muzaloop( char sciezka[] )
    {
        sndPlaySound( sciezka, SND_ASYNC | SND_LOOP );
    }
}
#endif
I później w swoim projekcie mogłem normalnie używać funkcji Muzaloop("...");
Ale później tych funkcji było za dużo i postanowiłem wpakować je do różnych plików. Tak więc plik Coś.h wyglądał tak:
C/C++
#ifndef COS_H
#define COS_H
#include "CosMuza.h"
#endif
A plik CosMuza.h tak:
C/C++
#ifndef COSMUZA_H
#define COSMUZA_H
#include <windows.h>
#include <mmsystem.h>
namespace Cos
{
    void Muzaloop( char sciezka[] )
    {
        sndPlaySound( sciezka, SND_ASYNC | SND_LOOP );
    }
}
#endif
I teraz pojawia się błąd, gdy w swoim projekcie używam funkcji Muzaloop("..."); To wyskakuje błąd:
  [Linker error] undefined reference to `Muzaloop(char*)'
  ld returned 1 exit status
Sory że to takie długie ale streścić tego bardziej nie mogłem... A może mi ktoś pomóc? Bo ja już kompletnie nie wiem co trzeba zrobić... (Przynajmniej wydaje mi sie że trzeba coś zlinkować tylko że ja nie tworzyłem żadnego pliku .a lub .lib ...)

PS. Jeżeli to coś da to używam Dev-C++ 4.9.9.2...
P-17061
Elaine
» 2010-05-21 20:50:28
nie, nic
P-17062
lenrokskate
» 2010-05-21 22:24:01
nie używaj Deva bo ma bardzo dużo błędów - lepszy jest np. Code::Blocks, Eclipse... Jest dużo lepszych alternatyw.

teraz problem: oczywiście incluedujesz cos.h do main.cpp? I sprawdź czy dobrze dopisałeś przestrzeń nazw.

A w ogóle to zrobiłem to źle bo w plikach .h nie powinno się umieszczać bloków funkcji - powinno to wyglądać tak:

C/C++
// cosmuza.h
#ifndef COS_H
#define COS_H
#include <windows.h>
#include <mmsystem.h>
namespace Cos
{
    void Muzaloop( char sciezka[] );
}
#endif
C/C++
//cosmuza.cpp
#include "cosmuza.h"

void cos::Muzaloop( char sciezka[] )
{
    sndPlaySound( sciezka, SND_ASYNC | SND_LOOP );
}
P-17063
Elaine
» 2010-05-21 23:43:51
$100 question: dlaczego nie powinno się definiować funkcji w nagłówkach?
P-17065
lenrokskate
» 2010-05-22 11:14:47
eee... bo tak jest w standardzie?
P-17067
Elaine
» 2010-05-22 11:25:37
Nieprawda, kombinuj dalej...
P-17068
michalp
» 2010-05-22 11:47:18
Podpowiedź: chodzi o coś z kompilacją.
P-17069
lenrokskate
» 2010-05-22 12:05:11
ups

usunąć
P-17070
« 1 » 2
  Strona 1 z 2 Następna strona