Çözüldü "'&' için lvalue gerekiyor" hatası

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

cacaa

Üye
Üye
Mesaj
43
Çözümler
3
Beğeni
13
Puan
414
Ticaret Puanı
0
Merhabalar cliente bazı ekstralar ekledikten sonra build ederken hata alıyorum.
İlgili hatayı veren kod budur:

Kod:
float distance = D3DXVec3Length(&(m_targetPosition - m_cameraPosition));
 
Çözüm
Benzeri bir hata alan olursa şu şekilde çözdüm.

C++:
PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());

değiştir:

C++:
quest::PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
Galiba kamerayla hedef arası uzaklığı hesaplamaya çalışıyorsun(emin değilim değişken isimlerinden yolaçıktım), hedefle kameranın x,y,z lerini birbirinden çıkartıp her işlemin karelerinin toplamını alıp sonucum karekökünü alarak yapmayı dener misin uzaklığı bulurken
'&' işaretini kullanmaya gerek kalmaz
 
lvalue demek, o verinin geçici hafızada (ram) yer kapladığı anlamına gelir. Örneğin değişkenler, hafızada yer kaplarlar. C++'da & operatörü, referans almak için kullanılır. Diğer bir deyişle, 'verinin hafızadaki adresi'.
Aldığın hataya gelecek olursak, bir rvalue verisinin referansını/adresini alamazsın. Çünkü hafızada yer kaplamıyor. Var olmayan bir şeyin referansını alamazsın kısaca. Örneğin (50+75) aritmetik işlemler rvalue dir.
Yukarıda paylaştığın kod parçacığında bir aritmetik işlem yapıyorsun ve o bir rvalue.
D3DXVec3Length fonksiyonun aldığı parametrelere göz atabilirsin, eminim referans istemiyordur.
Düzenle:
float distance = D3DXVec3Length(m_targetPosition - m_cameraPosition);

edit: Kodu sen yazdıysan, deneme yanılma yoluyla yazmanın kimseye faydası yok.
 
Yalnızca yenilenmiş karakter ekranını eklemeye çalışıyordum.

Şimdi de game source build ederken hata yaşıyorum.

Kod:
cmd_gm.cpp:2577:4: error: reference to 'PC' is ambiguous
 2577 |                         PC * pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
      |                         ^
./../../common/length.h:576:2: note: candidate found by name lookup is 'PC'
  576 |         PC,
      |         ^
./questnpc.h:19:8: note: candidate found by name lookup is 'quest::PC'
   19 |         class PC;
      |               ^
cmd_gm.cpp:2580:4: error: use of undeclared identifier 'pc'
 2580 |                         pc->SetQuest("ADMIN_QUEST", qs);
      |                         ^
cmd_gm.cpp:2582:24: error: use of undeclared identifier 'pc'
 2582 |                         QuestState & rqs = *pc->GetRunningQuestState();
      |                                             ^
cmd_gm.cpp:2587:5: error: use of undeclared identifier 'pc'

Hata aldığım kodlar:

Kod:
        else
        {
            char buf[1024+1];
            snprintf(buf, sizeof(buf), msg, g->GetID());

            using namespace quest;
            PC * pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
            QuestState qs = CQuestManager::instance().OpenState("ADMIN_QUEST", QUEST_FISH_REFINE_STATE_INDEX);
            luaL_loadbuffer(qs.co, buf, strlen(buf), "ADMIN_QUEST");
            pc->SetQuest("ADMIN_QUEST", qs);

            QuestState & rqs = *pc->GetRunningQuestState();

            if (!CQuestManager::instance().RunState(rqs))
            {
                CQuestManager::instance().CloseState(rqs);
                pc->EndRunning();
                return;
            }
        }

Burayla hiçbir ilişkim olmamasına rağmen hata veriyor anlamsızca.

Değişiklik yaptığım dosyalarda cmd_gm.cpp ile hiçbir bağlantım yok fakat hatayı buradan alıyorum.

1713387686316.png
 
Son düzenleme:
Yalnızca yenilenmiş karakter ekranını eklemeye çalışıyordum.

Şimdi de game source build ederken hata yaşıyorum.

Kod:
cmd_gm.cpp:2577:4: error: reference to 'PC' is ambiguous
 2577 |                         PC * pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
      |                         ^
./../../common/length.h:576:2: note: candidate found by name lookup is 'PC'
  576 |         PC,
      |         ^
./questnpc.h:19:8: note: candidate found by name lookup is 'quest::PC'
   19 |         class PC;
      |               ^
cmd_gm.cpp:2580:4: error: use of undeclared identifier 'pc'
 2580 |                         pc->SetQuest("ADMIN_QUEST", qs);
      |                         ^
cmd_gm.cpp:2582:24: error: use of undeclared identifier 'pc'
 2582 |                         QuestState & rqs = *pc->GetRunningQuestState();
      |                                             ^
cmd_gm.cpp:2587:5: error: use of undeclared identifier 'pc'

Hata aldığım kodlar:

Kod:
        else
        {
            char buf[1024+1];
            snprintf(buf, sizeof(buf), msg, g->GetID());

            using namespace quest;
            PC * pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
            QuestState qs = CQuestManager::instance().OpenState("ADMIN_QUEST", QUEST_FISH_REFINE_STATE_INDEX);
            luaL_loadbuffer(qs.co, buf, strlen(buf), "ADMIN_QUEST");
            pc->SetQuest("ADMIN_QUEST", qs);

            QuestState & rqs = *pc->GetRunningQuestState();

            if (!CQuestManager::instance().RunState(rqs))
            {
                CQuestManager::instance().CloseState(rqs);
                pc->EndRunning();
                return;
            }
        }

Burayla hiçbir ilişkim olmamasına rağmen hata veriyor anlamsızca.
PC isminde, kullanıcı tarafından tanımlanmış bir veri türü yok. Metin2 kodlarında LPCHARACTER vardı sanırım, ismini doğru hatırlamıyor olabilirim. Onu kullanmalısın
 
Benzeri bir hata alan olursa şu şekilde çözdüm.

C++:
PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());

değiştir:

C++:
quest::PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst