Tôi đã xem xét một vài câu hỏi khác về điều này, nhưng tôi không thấy lý do tại sao một hàm tạo mặc định thậm chí nên được gọi trong trường hợp của tôi. Tôi chỉ có thể cung cấp một hàm tạo mặc định, nhưng tôi muốn hiểu tại sao nó lại làm điều này và nó ảnh hưởng đến cái gì."Không có hàm tạo mặc định phù hợp nào" - Tại sao hàm tạo mặc định được gọi?
error C2512: 'CubeGeometry' : no appropriate default constructor available
Tôi có một lớp được gọi là ProxyPiece với một biến thành viên của CubeGeometry.Các nhà xây dựng có nghĩa vụ phải thực hiện trong CubeGeometry và gán nó cho biến thành viên. Đây là tiêu đề:
#pragma once
#include "CubeGeometry.h"
using namespace std;
class ProxyPiece
{
public:
ProxyPiece(CubeGeometry& c);
virtual ~ProxyPiece(void);
private:
CubeGeometry cube;
};
và nguồn:
#include "StdAfx.h"
#include "ProxyPiece.h"
ProxyPiece::ProxyPiece(CubeGeometry& c)
{
cube=c;
}
ProxyPiece::~ProxyPiece(void)
{
}
tiêu đề cho hình khối trông như thế này. Nó không có ý nghĩa với tôi để sử dụng một constructor mặc định. Tôi cần nó anyways ?:
#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;
};
Để rõ ràng hơn, có lẽ bạn có thể, trong đoạn "giống như", thay đổi 'cube = c;' thành 'cube.operator = (c);'. Nó sẽ giúp giải thích rằng nhiệm vụ không (từ góc độ ngôn ngữ) tái khởi tạo 'khối lập phương'. – hvd
@hvd: đã đồng ý, chỉnh sửa –
Vì vậy, tất cả các hàm tạo mặc định của bất kỳ biến thành viên nào được gọi trước hàm tạo cho lớp chứa? (và có, tôi sẽ làm cho nó một const :)) – AAB