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

Problem z łączeniem plików

Ostatnio zmodyfikowano 2016-11-15 17:48
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Problem z łączeniem plików
» 2016-11-13 23:40:19
Witam.
Program daje oczekiwany rezultat. Pragnę to od razu napisać.
Ale.
Przy kompilacji pokazuje takiego warninga w pliku nagłówkowym:
inline function 'void spiew()' used but never defined
plik główny .cpp:
C/C++
#include <iostream>
#include "klasa1.h"

using namespace std;

int balkon = 77; //deklaracja jakiejs zmiennej globalnej
inline void spiew(); //deklaracja jakiejs funkcji globalnej
//**************************************************************
int main()
{
    opera Lohengrin;
   
    Lohengrin.balkon = 6;
    Lohengrin.funkcja();
    spiew();
}
//***************************************************************
inline void spiew()
{
    cout << "Zwykla funkcja spiew (nie majaca nic wspolnego z klasa)\n";
}
plik źródłowy .cpp:
C/C++
#include <iostream>
#include "klasa1.h"

using namespace std;

//**********************************************
void opera::funkcja()
{
    cout << "balkon (skladnik klasy) = " << balkon << endl;
    cout << "balkon (zmienna globalna) = " <<::balkon << endl;
    //definicja zmiennej lokalnej (lokalnej dla tej funkcji)
    char balkon = 'M';
   
    cout << "\nPo definicji zmiennej lokalnej\n";
    cout << "balkon (zmienna lokalna) = " << balkon << endl;
    cout << "balkon (skladnik klasy) = " << opera::balkon << endl;
    cout << "balkon (zmienna globalna) = " <<::balkon << endl;
    //wywolanie funkcji
    ::spiew();
   
    int spiew = 7;
    //spiew();               <--BLAD! nazwa juz zaslonieta
    cout << "Po zasloneciu da sie wywolac funkcje spiew tylko tak\n";
    ::spiew(); //tak mozna
}
//**********************************************
plik nagłówkowy .h:
C/C++
#ifndef KLASA1_H_INCLUDED
#define KLASA1_H_INCLUDED
//definicja klasy

extern int balkon;
extern inline void spiew();

class opera
{
public:
    int n;
    float balkon; //skladnik klasy
   
    void funkcja();
    void spiew();
   
};
//koniec definicji klasy
#endif // KLASA1_H_INCLUDED

O Boże, ale spam :P
P-153662
carlosmay
» 2016-11-14 01:10:54
C/C++
class opera
{
public:
    int n;
    float balkon; //skladnik klasy
   
    void funkcja();
    void spiew(); // ? o to ma definicję?
   
};
P-153667
Lich555
Temat założony przez niniejszego użytkownika
» 2016-11-14 23:28:50
O kurcze. Nie wiem co myślałem pisząc to :P Ale akurat nie tam wywalało mi błąd. Błąd był przy deklaracji funkcji inline w pliku nagłówkowym. Usunąłem ją. Określę, co ja chcę zrobić. W pliku źródłowym chcę wywołać funkcję spiew zdefiniowaną w main.
plik źródłowy:
C/C++
#include <iostream>
#include "klasa1.h"

using namespace std;

//**********************************************
void opera::funkcja()
{
    cout << "balkon (skladnik klasy) = " << balkon << endl;
    cout << "balkon (zmienna globalna) = " <<::balkon << endl;
    //definicja zmiennej lokalnej (lokalnej dla tej funkcji)
    char balkon = 'M';
   
    cout << "\nPo definicji zmiennej lokalnej\n";
    cout << "balkon (zmienna lokalna) = " << balkon << endl;
    cout << "balkon (skladnik klasy) = " << opera::balkon << endl;
    cout << "balkon (zmienna globalna) = " <<::balkon << endl;
    //wywolanie funkcji
    ::spiew(); //tu funkcje chce wywolac
   
    int spiew = 7;
    //spiew();               <--BLAD! nazwa juz zaslonieta
    cout << "Po zasloneciu da sie wywolac funkcje spiew tylko tak\n";
    ::spiew(); //tak mozna
    cout << "Zmienna spiew = " << spiew; //tutaj mam taki rezultat, że najpierw wypisuje mi zmienną (7), a zaraz za nią wynik funkcji spiew
}
//**********************************************

@Edit
Poszperałem, poczytałem i jak usunąłem inline to jest dobrze. Ale ciągle pozostaje problem z tą zmienną spiew.
Jak, na końcu tego kodu, wywołać samą zmienną? Jak opisałem, jest tutaj taki rezultat:
7Zwykla funkcja spiew( nie majaca nic wspolnego z klasa )
P-153709
karambaHZP
» 2016-11-15 05:28:50
C/C++
Lohengrin.funkcja(); // ostatnie jest '7'
spiew(); // następna treść tej funkcji
 ?
P-153712
Lich555
Temat założony przez niniejszego użytkownika
» 2016-11-15 17:48:42
Dobra, jaki ja jestem głupi... Dzięki za pomoc.
P-153746
« 1 »
  Strona 1 z 1