C++ class ile kütüphane yazmak

ikaross

Hectopat
Katılım
15 Mayıs 2020
Mesajlar
667
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
öğrenci
Arkadaşlar class kullanarak bir kütüphane uygulaması yazacağım. Ancak admine önceden .h uzantılıda şifre ve kullanıcı adı belirleyip. yurutucu.cpp de bunu çalıştırmak istiyorum. Yani kişi kullanıcı adı ve şifre girecek doğruysa sistem onaylayıp devam edecek ama bu hataları alıyorum, yardımcı olur musunuz?
 

Dosya Ekleri

  • unknown_2021.05.24-20.45.png
    unknown_2021.05.24-20.45.png
    107,3 KB · Görüntüleme: 211
  • unknown_2021.05.24-20.45_1.png
    unknown_2021.05.24-20.45_1.png
    100,8 KB · Görüntüleme: 129
  • unknown_2021.05.24-20.45_2.png
    unknown_2021.05.24-20.45_2.png
    115,2 KB · Görüntüleme: 177
Dolusuyla hata var, hangi birisinden başlasam ki.
İlki Visual Studio'yu Türkçe kullanmak. Aldığınız hataları ne siz, ne onu çeviren kişi, ne de benim anladığımı sanmıyorum. Türk herhangi birinin de hepsini güzelce anlayabildiğini sanmıyorum.
cstring eklemek. Gerçekten onu kullanacağınız bir şey olduğunu da sanmıyorum.
Sınıflarda namespace kullanmamanızı tavsiye ederim. Kimlerin onu include edeceği belli değil. Adam bir anda bildiği bir namespace'i kullanmaya başlamış olabilir.

Ufak bir şeyler yaptım. Çalışıyor olması lazım. Genel mantığı anlamışsınızdır.
İsterseniz salt okunur bir dosya hazırlayıp oradan da okuyabilirsiniz.

Class içinde değer tanımlaması yapamazsın, bir constructor fonksiyonu açıp onun içinde tanımlama yapman lazım.
Benim bildiğim öyle değil. Nereden öğrendiniz bu bilgiyi?
Benim yaptığım şekilde yapınca ilk nesne oluştuğunda ilklendirme yapılıyor olması lazım.

Kod:
#pragma once
#include <iostream>
#include <string>

class Admin {
public:

    Admin();
    Admin(std::string username, int password);

    void show();
    int getAdminPassword();
    std::string getAdminUsername();
  
private:
    const int ADMIN_PASSWORD = 1234;
    int adminPassword;
    const std::string ADMIN_USERNAME = "admin";
    std::string adminUsername;
};
Kod:
#include "Admin.h"

Admin::Admin() {
}

Admin::Admin(std::string username, int password) :adminUsername{ username }, adminPassword{ password } {
}

void Admin::show() {
    std::cout << "Kullanici adi girin: ";
    std::cin >> adminUsername;

    if (ADMIN_USERNAME == adminUsername) {
        std::cout << "Kullanici adi dogru. Giris basarili." << std::endl;
    }
    else {
        std::cout << "Kullanici adi yanlis. Lutfen tekrar deneyiniz." << std::endl;
    }
}

int Admin::getAdminPassword() {
    return adminPassword;
}

std::string Admin::getAdminUsername() {
    return adminUsername;
}
Kod:
#include <iostream>
#include <algorithm>
#include <string>
#include "Admin.h"

using namespace std;

int main() {
    auto secim{ 0 };

    cout << "ANA MANU" << endl
        << "1- Admin Girisi" << endl
        << "2- Uye Girisi" << endl
        << "3- Cikis" << endl;
    cout << "Seciminizi girin: ";
    cin >> secim;

    switch (secim)     {
    case 1:
        cout << "" << endl;
        break;
    case 2:
        cout << "Uye" << endl;
        break;
    case 3:
        cout << "Cikis" << endl;
        break;
    default:
        cout << "Hatali tuslama yaptiniz." << endl;
        break;
    }

    Admin admin("ahmet", 123);

    admin.show();


    return 0;
}
 
Dolusuyla hata var, hangi birisinden başlasam ki.
İlki Visual Studio'yu Türkçe kullanmak. Aldığınız hataları ne siz, ne onu çeviren kişi, ne de benim anladığımı sanmıyorum. Türk herhangi birinin de hepsini güzelce anlayabildiğini sanmıyorum.
Cstring eklemek. Gerçekten onu kullanacağınız bir şey olduğunu da sanmıyorum.
Sınıflarda namespace kullanmamanızı tavsiye ederim. Kimlerin onu include edeceği belli değil. Adam bir anda bildiği bir Namespace'i kullanmaya başlamış olabilir.

Ufak bir şeyler yaptım. Çalışıyor olması lazım. Genel mantığı anlamışsınızdır.
İsterseniz salt okunur bir dosya hazırlayıp oradan da okuyabilirsiniz.

Benim bildiğim öyle değil. Nereden öğrendiniz bu bilgiyi?
Benim yaptığım şekilde yapınca ilk nesne oluştuğunda ilklendirme yapılıyor olması lazım.

Kod:
#pragma once.
#include <iostream>
#include <string>

class Admin {
public:

 Admin();
 Admin(std::string username, int password);

 void show();
 int getAdminPassword();
 std::string getAdminUsername();

private:
 const int ADMIN_PASSWORD = 1234;
 int adminPassword;
 const std::string ADMIN_USERNAME = "admin";
 std::string adminUsername;
};
Kod:
#include "Admin.h"

Admin::Admin() {
}

Admin::Admin(std::string username, int password) :adminUsername{ username }, adminPassword{ password } {
}

void Admin::show() {
 std::cout << "Kullanici adi girin: ";
 std::cin >> adminUsername;

 if (ADMIN_USERNAME == adminUsername) {
 std::cout << "Kullanici adi dogru. Giris basarili." << std::endl;
 }
 else {
 std::cout << "Kullanici adi yanlis. Lutfen tekrar deneyiniz." << std::endl;
 }
}

int Admin::getAdminPassword() {
 return adminPassword;
}

std::string Admin::getAdminUsername() {
 return adminUsername;
}
Kod:
#include <iostream>
#include <algorithm>
#include <string>
#include "Admin.h"

using namespace std;

int main() {
 auto secim{ 0 };

 cout << "ANA MANU" << endl.
 << "1- Admin Girisi" << endl.
 << "2- Uye Girisi" << endl.
 << "3- Cikis" << endl;
 cout << "Seciminizi girin: ";
 cin >> secim;

 switch (secim) {
 case 1:
 cout << "" << endl;
 break;
 case 2:
 cout << "Uye" << endl;
 break;
 case 3:
 cout << "Cikis" << endl;
 break;
 default:
 cout << "Hatali tuslama yaptiniz." << endl;
 break;
 }

 Admin admin("ahmet", 123);

 admin.show();

 return 0;
}

Teşekkür ederim projem olduğu için hocanın kısıtladığı şekilde yapabiliyorum. Türkçe olmasının sebebi İngilizce anlamayıp anlık olarak Türkçe'ye çevirdim. Genel bir kütüphane uygulaması yazmaya çalışıyorum. Admin üye ekleyip üye siliyor kitap ekleyip çıkarıyor üyeler kitap ödünç alıp geri bırakıyor karmaşık bir şey.
 
Benim bildiğim öyle değil. Nereden öğrendiniz bu bilgiyi?
Benim yaptığım şekilde yapınca ilk nesne oluştuğunda ilklendirme yapılıyor olması lazım.

Demek istediğim herhangi bir class üyesine bu şekilde "=" operatörü ile veri aktarılamaz.(Modern C++ da varsayılan değer tanımlaması olarak "{ değer }" şeklinde aktarılabilir ancak orası ayrı konu). Sizin yapmış olduğunuz şey class üzerinde "sabit" bir değişken açmak, sonradan değiştirilen bir class üyesi değil.

O zaman ben nasıl kullanıcı adı şifre belirleyeceğim admin.
@Vavien. nickli arkadaşın yazdığı cevapta açıladığı için tekrar yazmaya gerek duymadım o şekilde kullanabilirsiniz.
 
Sizin yapmış olduğunuz şey class üzerinde "sabit" bir değişken açmak, sonradan değiştirilen bir class üyesi değil.
Sanırım const olmasıyla alakalı sandınız. Konu sahibi sabit bir şey istediği için const yaptım. Hatta isterseniz onu constexpr yapmaya çalışabilirsiniz. Yapamayacağınızı fark edeceksiniz. Const olmasıyla alakasız. İlk değer .h dosyasında verilebilir. Ama o değer sınıfın ilk nesnesi oluştuğunda atanacaktır. Ondan önce erişilmeye çalışılırsa hata alınır.
 
Eğer ki Discord adresinizi verebilirseniz daha detaylı söyleyebilirim. Ödev olduğu için bu tip herkese açık yerde sorun oluşturabilir.
 
Özelden yardım kurallara aykırı. Bu yüzden bu konuda burada bir adres paylaşamam. Çok dert ediyorsanız çaba gösterip bana ulaşmanın bir yolunu bulabilirsiniz.

Size ödev verildiyse bir şekilde yapabilecek kadar anlatılmıştır. Kendiniz yapmaya çalışın. İnternetten ve dokümantasyondan yararlanın.
 

Yeni konular

Geri
Yukarı