Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[błąd kompilacji] invalid initialization of non-const reference of type from an rvalue of type

Ostatnio zmodyfikowano 2016-06-14 20:57
Autor Wiadomość
Rashmistrz
Temat założony przez niniejszego użytkownika
[błąd kompilacji] invalid initialization of non-const reference of type from an rvalue of type
» 2016-06-14 16:14:15
Zwraca mi błąd kompilacji:
InitGL.cpp|10|error: invalid initialization of non-const reference of type 'GLuint& {aka unsigned int&}' from an rvalue of type 'GLuint* {aka unsigned int*}'|
.
Wskazując na wywołanie funkcji:
NeHeLoadBitmap( "tekstura.bmp", texture )
.

fragment "Globals.hpp":
extern GLuint texture[];
.

fragment "Globals.cpp":
GLuint texture[ 3 ];
.

"GlauxReplacement.cpp":
C/C++
#pragma once

/************************************************************************
                         REPLACEMENT FOR GLAUX
************************************************************************
This is not a full blown bitmap loader.  It is a quick and easy
way to replace the glAux dependant code in my older tutorials
with code that does not depend on the glAux library!

    This code only loads Truecolor Bitmap Images.  It will not load
8-bit bitmaps.  If you encounter a bitmap that will not load
use a program such as Irfanview to convert the bitmap to 24 bits.
************************************************************************/

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
// #include <GL/glext.h>

bool NeHeLoadBitmap( LPTSTR szFileName, GLuint * texid )
{ // Creates Texture From A Bitmap File
   
    HBITMAP hBMP; // Handle Of The Bitmap
    BITMAP BMP; // Bitmap Structure
   
    glGenTextures( 3, texid ); // Create The Texture
    hBMP =( HBITMAP ) LoadImage( GetModuleHandle( NULL ), szFileName, IMAGE_BITMAP,
    0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );
   
    if( !hBMP ) // Does The Bitmap Exist?
         return FALSE; // If Not Return False
   
    // Get The Object
    GetObject( hBMP, sizeof( BMP ), & BMP );
    // hBMP:        Handle To Graphics Object
    // sizeof(BMP): Size Of Buffer For Object Information
    // &BMP:        Buffer For Object Information
   
    // Pixel Storage Mode (Word Alignment / 4 Bytes)
    glPixelStorei( GL_UNPACK_ALIGNMENT, 4 );
    // Typical Texture Generation Using Data From The Bitmap
   
    // Stwórz niefiltrowan¹ teksturê
    glBindTexture( GL_TEXTURE_2D, texid[ 0 ] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
    //glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY,
    //             0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    glTexImage2D( GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight,
    0, GL_RGB, GL_UNSIGNED_BYTE, BMP.bmBits ); // GL_BGR_EXT
   
    // Stwórz tekturê filtrowan¹ liniowo
    glBindTexture( GL_TEXTURE_2D, texid[ 1 ] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    //glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY,
    //             0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    glTexImage2D( GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight,
    0, GL_RGB, GL_UNSIGNED_BYTE, BMP.bmBits );
   
    // Stwóz mipmappow¹ teksturê
    glBindTexture( GL_TEXTURE_2D, texid[ 2 ] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
    //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY,
    //                  GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    gluBuild2DMipmaps( GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight,
    GL_RGB, GL_UNSIGNED_BYTE, BMP.bmBits );
   
    DeleteObject( hBMP ); // Delete The Object
    return TRUE; // Loading Was Successful
}

/*BOOL Initialize (GL_Window* window, Keys* keys)
{   // Any GL Init Code & User Initialiazation Goes Here
g_window = window;
g_keys = keys;

// Start Of User Initialization
if (!NeHeLoadBitmap("Data/NeHe.bmp", texture[0]))   // Load The Bitmap
return FALSE;   // Return False If Loading Failed
}*/

"GlauxReplacement.hpp":
C/C++
#include <windows.h>
#include <GL/gl.h>
http: //cpp0x.pl/jsRequired.php
bool NeHeLoadBitmap( LPTSTR szFileName, GLuint & texid );

Najwidoczniej popełniłem gdzieś
drobny błąd niezauważalny dla mnie. :/

Przede wszystkim nie rozumiem
po polsku co ten błąd oznacza. :C
P-149127
1aam2am1
» 2016-06-14 16:26:13
On nie chce wskaźnika tylko obiekt.
P-149128
Rashmistrz
Temat założony przez niniejszego użytkownika
» 2016-06-14 16:42:38
Whoops! Deklaracja nie zgadzała się z definicją. :D
hpp:
bool NeHeLoadBitmap( LPTSTR szFileName, GLuint & texid );
.
cpp:
bool NeHeLoadBitmap( LPTSTR szFileName, GLuint * texid )
.

On nie chce wskaźnika tylko obiekt.
Mimo tego, nadal nie rozumiem
treści błędu i na czym on polega.
P-149130
jankowalski25
» 2016-06-14 17:01:57
C/C++
#include <iostream>

void f( int & liczba )
{
    std::cout << liczba << '\n';
    liczba = 0; //można tak napisać, więc pierwsza wersja nie zadziała
}

int main()
{
    int liczba = 23111;
    //f(10792);
    //error: invalid initialization of non-const reference of type
    //‘int&’ from an rvalue of type ‘int’
    f( liczba ); //ok
}
P-149132
1aam2am1
» 2016-06-14 20:57:42
InitGL.cpp|10|error: invalid initialization of non-const reference of type 'GLuint& {aka unsigned int&}' from an rvalue of type 'GLuint* {aka unsigned int*}'|

Znaczy:

błąd: zła inicjalizacja nie stałej wartości typu GLuint& z przekazanej wartości typu GLuint*

Przekazywałeś wskaźnik na początek tablicy a funkcja chciała wyłuskany obiekt. Czyli chciała:
NeHeLoadBitmap( "tekstura.bmp", texture[0] )
P-149138
« 1 »
  Strona 1 z 1