Error en el puntero de estructura de C++: la expresión debe ser un lvalue modificable_Finalmente se encontró que la solución es simple

Solía ​​​​usar punteros muy bien.

Durante mucho tiempo (con C ++ durante 2 semanas), el puntero de clase se escribe directamente en la clase y no hay problema con la inicialización directa

private:
	//D3D类
	D3DClass* mD3D;
mD3D = new D3DClass*

Como resultado, para hacer la conversión de datos hoy, debe ser una estructura (también hay una ventaja, es mejor escribir un archivo de encabezado que una clase, y un archivo CPP escribe dos archivos y más clases, y la estructura es más fácil entender), y el resultado es una locura, y se dice que no se puede modificar.


public:
    FrameBufferType* lastBuffer;

Busqué en Internet, las posibles soluciones incluyen

1. Asignación de puntero

int*p;

p = (int *) 4;

p* = *xxx;

En primer lugar, sin mencionar que en el combate real no usarás int en absoluto, pero

En segundo lugar, he visto a un estudiante universitario famoso escribir un código tan "complejo"

2. asignación de valor

El lado izquierdo del signo igual es un valor l, el lado derecho es un valor r y el lado izquierdo debe ser una variable,

1 = x;//这样肯定提示左值不可修改

No creo que nadie que haya estado en la escuela primaria diría semejante tontería.

Las personas que van a CSDN son todas personas inteligentes. Deben inicializar variables y usar variables para almacenar algunos datos.

3. La inicialización de la estructura debe inicializarse así.

Por supuesto, la captura de pantalla anterior no parece tener un problema de inicialización, sino otro problema.

Las matrices de caracteres no se pueden asignar a otra matriz con "=", es decir, name=str no es aceptable.

No estoy seguro si es la razón por la que compilé con visulstudio,

Si lo escribimos así, incluso si no hay un problema de matriz, la inicialización de la primera línea no se compilará y el indicador es:

Se utiliza una variable no inicializada

No quería empezar a hablar de eso, pero después de usar C++ durante dos semanas, primero encontré dos problemas importantes.

1. Varias incluyen excepciones, no se puede encontrar el archivo (separar el archivo de encabezado y CPP causó el bote)

2. No se puede hacer el juicio de puntero (reflexión) más simple, y la compilación debe compilarse de arriba a abajo (y no se pueden evitar varios cambios de macro)

Bueno, esto no es importante, c ++ es rápido, poderoso, ideas de programación.

(Debe haber sido creado hace 40 años cuando era mejor que C. También se le llama c plus plus, generalmente llamado A+, y también tiene el nombre de prospectivo, llamado ++)

Pero solo quiero preguntar,

1. Quiero una cuerda sin cuerda

2. Tener una matriz sin una matriz (¿no es obvia la captura de pantalla anterior?)

3. Varios punteros no están seguros de si están asignados o no

¿Qué puede hacer C++?

Felicitaciones a la plataforma, el 25% de los programadores la están usando, el primer lenguaje del mundo

(Lo que escuché es que aquí no hay trescientos taeles de plata)

4. Intenté los siguientes 3 métodos sin éxito

	//1.使用了未初始化的局部变量 's'
	//FrameBufferType* s;
	//s->View = matrixPtr->View;
	// 2.可以的分配??
	//lastBuffer = malloc(sizeof(struct FrameBufferType));
    //3.局部变量确实可以(cpp内局部)
	//FrameBufferType* xx = (struct FrameBufferType*)malloc(sizeof(struct FrameBufferType));
	

En realidad, hay 3 pistas para la solución.

se pueden asignar punteros

se puede asignar direccion

El puntero const no se puede cambiar, porque const significa que no se puede cambiar. El papel de, en la eficiencia, el funcionamiento general, la colaboración en equipo, el desarrollo de extensiones y otras funciones se ven fundamentalmente afectados, insípidos, es la evaluación más apropiada de const)

5. Finalmente, de repente descubrí que era tan simple

class FrameCBuffer : public CBuffer
{
	FrameBufferType* lastBuffer = new FrameBufferType;

Siempre que proporcione un valor predeterminado, solo se puede establecer como predeterminado en el archivo de encabezado,

Es cierto que el puntero de estructura debe declararse en el archivo de encabezado, y el juicio lógico de la compilación debe ser el mismo que const......

Problema pendiente

  • ¿Tomará memoria?
  • ¿Se ralentizará la compilación?
  • ¿Aumenta la experiencia del paquete?

Muchas personas excelentes en Internet están esperando la compilación, bebiendo café mientras esperan la compilación y leyendo + compilando durante mucho tiempo. Parece que todos piensan que algo está mal, generalmente no es correcto.

Supongo que te gusta

Origin blog.csdn.net/avi9111/article/details/123854012
Recomendado
Clasificación