Ho esaminato alcune altre domande a riguardo, ma non vedo perché nel mio caso debba essere chiamato un costruttore predefinito. Potrei semplicemente fornire un costruttore predefinito, ma voglio capire perché sta facendo questo e ciò che colpisce."Nessun costruttore predefinito appropriato disponibile" - Perché il costruttore predefinito è anche chiamato?
error C2512: 'CubeGeometry' : no appropriate default constructor available
Ho una classe denominata ProxyPiece con si suppone che una variabile membro del costruttore CubeGeometry.The a prendere in un CubeGeometry e assegnarlo alla variabile membro. Ecco l'intestazione:
#pragma once
#include "CubeGeometry.h"
using namespace std;
class ProxyPiece
{
public:
ProxyPiece(CubeGeometry& c);
virtual ~ProxyPiece(void);
private:
CubeGeometry cube;
};
e la fonte:
#include "StdAfx.h"
#include "ProxyPiece.h"
ProxyPiece::ProxyPiece(CubeGeometry& c)
{
cube=c;
}
ProxyPiece::~ProxyPiece(void)
{
}
l'intestazione per la geometria del cubo assomiglia a questo. Non ha senso per me usare un costruttore predefinito. Ho bisogno in ogni modo ?:
#pragma once
#include "Vector.h"
#include "Segment.h"
#include <vector>
using namespace std;
class CubeGeometry
{
public:
CubeGeometry(Vector3 c, float l);
virtual ~CubeGeometry(void);
Segment* getSegments(){
return segments;
}
Vector3* getCorners(){
return corners;
}
float getLength(){
return length;
}
void draw();
Vector3 convertModelToTextureCoord (Vector3 modCoord) const;
void setupCornersAndSegments();
private:
//8 corners
Vector3 corners[8];
//and some segments
Segment segments[12];
Vector3 center;
float length;
float halfLength;
};
Per essere ancora più chiaro, forse potresti, nel tuo "è uguale a" snippet, cambiare 'cube = c;' in 'cube.operator = (c);'. Aiuterebbe a spiegare che il compito non reintegra (da una prospettiva linguistica) 'cube'. – hvd
@hvd: accettato, modifica –
Quindi tutti i costruttori predefiniti di qualsiasi variabile membro vengono chiamati prima del costruttore nella classe contenitore? (e sì lo renderò un const :)) – AAB