Çözüldü C++ Hata -3

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Primearc

Hectopat
Katılım
3 Ocak 2021
Mesajlar
1.489
Makaleler
3
Çözümler
13
Yer
Matrix
Öncelikle @TerabyteForever 'ın önceki sorumda bana attığı mesaja tamamen katılıyorum. Kendim uğraşmam lazım. Ama emin olun ki her soruyu zaten buraya atmıyorum. Önce uğraşıyorum ve hatanın sebebini anlamaya çalışıyorum. Daha sonra hata kodunu internetten arıyorum. Her neyse..

[CODE lang="cpp" title="C++"]#include <iostream>

using namespace std;

class Gamer
{
public:
static int gamers;
Gamer() {
gamers ++;
cout << "Yeni oyuncu oluşturuldu" << endl;
}
};

int main()
{
int Gamer::gamers = 0;


Gamer gamer1();
Gamer gamer2();
Gamer gamer3();
Gamer gamer4();
Gamer gamer5();

cout << "Oyuncu sayısı: " << Gamer::gamers << endl;


return 0;
}[/CODE]
 
Çözüm
Peki sadece tek metodla yapmak mümkün değil mi?

C++:
int main()
{
    Gamer gamer1;
    Gamer gamer2;
    Gamer gamer3
    cout << gamers << endl;
    return 0;
}

Daha rahat gör diye uzun uzun yazmıştım. Tabii ki mümkün. Zaten nesne yaratılınca constructor'da gamer sayısını artırıyorsun. Tek metoda da gerek yok ki, static olarak tutuyorsun değişkeni onu yazdırabilirsin direkt.
Ben yanlış görmüşüm. Üstüne yanlış hatırlamışım.
Ben şöyle söyleyeyim, gerisi sizde olsun.

Bu dosyalarda bu kodlar varken bende çalışıyor. Tek dosyada linker hatası veriyor.

[CODE title="Source.cpp"]#include <iostream>
#include "Gamer.h"

using namespace std;

int main() {

Gamer gamer1;
Gamer gamer2;
Gamer gamer3;
Gamer gamer4;
Gamer gamer5;

cout << "oyuncu sayisi: " << Gamer::gamers << endl;

return 0;
}[/CODE]
[CODE title="Gamer.h"]#pragma once
#include <iostream>

class Gamer{
public:
static int gamers;

Gamer();
};[/CODE]
[CODE title="Gamer.cpp"]#include "Gamer.h"

Gamer::Gamer(){
gamers++;
std::cout << "Yeni oyuncu olusturuldu." << std::endl;
}

int Gamer::gamers = 0;
[/CO
Ben yanlış görmüşüm. Üstüne yanlış hatırlamışım.
Ben şöyle söyleyeyim, gerisi sizde olsun.

Bu dosyalarda bu kodlar varken bende çalışıyor. Tek dosyada linker hatası veriyor.

[CODE title="Source.cpp"]#include <iostream>
#include "Gamer.h"

using namespace std;

int main() {

Gamer gamer1;
Gamer gamer2;
Gamer gamer3;
Gamer gamer4;
Gamer gamer5;

cout << "oyuncu sayisi: " << Gamer::gamers << endl;

return 0;
}[/CODE]
[CODE title="Gamer.h"]#pragma once
#include <iostream>

class Gamer{
public:
static int gamers;

Gamer();
};[/CODE]
[CODE title="Gamer.cpp"]#include "Gamer.h"

Gamer::Gamer(){
gamers++;
std::cout << "Yeni oyuncu olusturuldu." << std::endl;
}

int Gamer::gamers = 0;
[/CODE]
gamer.cpp'de son satırda yaptığınız şeye gerek var mıydı? Sonuçta static değişkeni daha önce tanımlamıştık.
 
Header dosyasında prototipler veriliyor, tanımlamalar cpp'de yapılıyor.
Değişkeni header dosyasında tanımlıyoruz, ilklendirmeyi ise cpp'de yapıyoruz.
Ben hocamdan böyle görmüştüm. Konudaki ilk mesajımda tek dosyada yapmayı anlatmaya çalıştım ama ben de karıştırmışım.

Normalde static değişkene değer ataması ilk nesne oluşturulduğunda yapılır. Yani constructor içinde gamers++ gibi o değişkene müdahale eden bir şey olmasaydı gamers = 0 constructor içine yazılabilirdi diye biliyorum.

Şimdi deneyeceğim. Sonucu yazarım.

Birkaç farklı şekilde denedim ama çalıştırmayı beceremedim.
 

Yeni konular

Geri
Yukarı