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

  • Konuyu açan Konuyu açan cacaa
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 304
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
88
Çözümler
7
Beğeni
50
Puan
709
Ticaret Puanı
0
Merhabalar cliente bazı ekstralar ekledikten sonra build ederken hata alıyorum.
İlgili hatayı veren kod budur:

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

C++:
Genişlet Daralt Kopyala
PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());

değiştir:

C++:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
        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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
        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++:
Genişlet Daralt Kopyala
PC* pc = CQuestManager::instance().GetPC(ch->GetPlayerID());

değiştir:

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