C++ - Problem z konstruktorem.

0

Witam,
mam taki mały kod:
main

#include <iostream>
#include "niam.h"
using namespace std;

int main()
{
   a* abc = new a("asd");
    return 0;
}

niam.h

#ifndef NIAM_H_INCLUDED
#define NIAM_H_INCLUDED
#include <string>
#include <iostream>
class a
{
  public:
  a(std::string str);
};

#endif // NIAM_H_INCLUDED
niam
#include "niam.h"

a::a(std::string str)
{
    cout<<str.c_str;
}

Napisałem go na podstawie tego tutorialu//pl.wikibooks.org/wiki/C++/Konstruktor_i_destruktor
Lecz niestety pojawia się następujący błąd w build log:
...\main.cpp|7|undefined reference to a::a(std::string)'|`
Więc o co robię źle?
Zapewne zrobiłem jakiś głupi błąd w kodzie, lecz każdy od czegoś zaczynał i proszę o wyrozumiałość. :]

1

W niam.cpp jest błąd. cout<<str.c_str; co to ma być? std::cout << str; powinno być. c_str to po pierwsze metoda a po drugie jest niepotrzebna. Poza tym brakuje przestrzeni nazw.

Ponieważ jest tam błąd plik się nie kompiluje i jest błąd linkowania.

0

Niestety, ale po poprawieniu na std::cout << str nadal jest dokładnie ten sam błąd.

0

Jak to kompilujesz? Nie ma innych komunikatów?

0

Używam środowiska Code blocks, a kompiluje w wersji debug.
W projekcie są dodane wszystkie 3 pliki.
Nie ma żadnego innte błędu. Tu jest cały build log:

obj\Debug\main.o||In function `main':|
<...>\main.cpp|7|undefined reference to `a::a(std::string)'|
||=== Build finished: 1 errors, 0 warnings ===|
0

U mnie w C::B przy takim niam.h się kompiluje i działa:

#include "niam.h"

a::a(std::string str)
{
    std::cout<<str;
}

Jestes pewien ze wsio masz w 1 folderze? :)

0

Czy dołożyłeś niam.cpp do projektu?

0

Tak, jest dołączony na 100%, ponieważ mam go na liście.
Wszystkie te pliki są w jednym folderze.

0

A moze stworz od nowa projekt, skopiuj te kody do nowo utworzonych plikow i sprawdz? Powinno wsio działać. ;D

0

Stworzyłem od nowa projekt i nadal to samo.

0

@ACslashDC, może wklej jeszcze raz co aktualnie masz w plikach. Bo z tego co opowiadasz to jakieś cuda na kiju.

0

Zawartość:

#include <iostream>
#include "niam.h"
using namespace std;

int main()
{
   a* abc = new a("asd");
    return 0;
}


#include "niam.h"

a::a(std::string str)
{
    std::cout<<str;
}


#ifndef NIAM_H_INCLUDED
#define NIAM_H_INCLUDED
#include <string>
#include <iostream>
class a
{
  public:
  a(std::string str);
};

#endif // NIAM_H_INCLUDED

Nawet skrina zrobiłem na dowód:
http://scr.hu/5aq/3mllc

0

Nawet założyłem specjalnie 4 projekty i wpisałem te twoje pliki skompilowało mi się poprawnie w:
DevCpp
Code:Block
Visual
C++ Bulder
tylko naturalne ostrzeżenie że zmienna abc zainicjalizowana ale nie użyta.

Jeżeli nie jest tak że w IDE podałeś niam.cpp z jednego folderu zaś edytujesz niam.cpp z innego folderu to:
nie mogę nic poradzić oprócz jednego - zmień IDE.

0

Kliknij prawym na niam.cpp > properties > build i zobacz czy masz zaznaczone Belongs in targets: Debug i Release. Wygląda na to, że niam.cpp w ogóle nie jest dodany do builda.
Jak to nie pomoże to tak jak pisał Endrju pokaż Build log, a nie tylko Build messages.

0

miałem podobny problem gdy zaczynałem zabawę z c::b. Po prostu tworzyłem nowy plik a nie nowy projekt. Wydawało mi się że skoro stworzyłem kilka plików w ramach jednej sesji to są ze sobą powiązane.

Czy na pewno tworzysz nowy pusty projekt?
File -> New ->Project -> Empty project
i dopiero wtedy tworzysz pliki? (lub je dołączasz do projektu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1