함수 전송값 복제 구조 함수 깊이 복사
class A{
int *m_pi;
public:
A()
{
m_pi = new int;
}
~A()
{
delete m_pi;
}
};
void func(A _a)
{
int a = 0;
}
void main()
{
A a;
func(a);
} 실행 후 붕괴 원인은func를 호출할 때 임시 대상이 생겨서 구조 함수를 호출하지 않았고 기본 비트 복사를 호출하여 구조 함수를 복제한 다음에 m 를 분석했기 때문이다pi의 메모리, 프로그램이 분석 a를 끝낼 때 붕괴, 해결 방안은 복사 구조 함수를 다시 불러오는 것입니다
class A
{
int *m_pi;
public:
A()
{
m_pi = new int;
}
~A()
{
delete m_pi;
}
A(A &_a)
{
m_pi = new int;
*m_pi = *_a.m_pi;
}
};
void func(A _a)
{
int a = 0;
} A에 CArray 객체 추가
class A
{
int *m_pi;
CArray <int,int &> m_arr;
public:
A()
{
m_pi = new int;
}
~A()
{
delete m_pi;
}
};
void func(A _a)
{
int t = 0;
} 주 함수:
A a; func(a);
컴파일 오류: "CObject::CObject":private 구성원에 접근할 수 없음 ("CObject"클래스에서 설명함) 이유복사 구조 함수는 정의되지 않았지만, 기본 클래스인 CObject는 정의되었지만,private 권한으로 컴파일 오류가 발생했습니다.private: CObject(const CObject& objectSrc); //no implementation void operator=(const CObject& objectSrc);//no implementation은 대입 연산자에 대해 같은 주 함수 A a를 사용합니다. A b; b = a;//A b = a와 다른 첫 번째 오류가 발생했습니다. 컴파일러?오류 보고: "CObject::operator=":private 구성원에 접근할 수 없음(CObject"클래스에서 설명)
솔루션:
재부팅 연산자
A &operator=(A &) { return *this; }
복제 구조 함수 정의
A(A &) { }
더욱 고려한다
class A
{
int m_a;
CArray <int,int> m_arr;
public:
A(int i){};
};
void main()
{
A a;
CArray<A,A &> arr;
arr.Add(a);
} 오류 보고:
"A"에 사용할 수 있는 기본 구조 함수가 없습니다.
이유:
CArray에 들어가는 유형에 매개 변수 구조 함수가 없어야 하기 때문일 수 있습니다. 매개 변수 구조 함수를 제거합니다
http://hi.baidu.com/idealsoft/item/4de85dcac49b2c2847d5c07d
오류 보고:
"CObject::operator=":private 구성원에 접근할 수 없습니다("CObject"클래스에서 설명)
이유:
arr.Add(a)일 경우 A의=를 호출하고 정의되지 않으면 차례로 구성원을 호출한다.CArray 구성원 marr, Add 함수의 서명은 매개 변수의 종류를 A&로 입력해야 하기 때문에 컴파일러가 문장을 컴파일할 때:arr.Add(a);이 문장을 A&new Element = b로 컴파일할 때 자동으로 a를 A의 인용으로 강제로 변환합니다.arr.Add(newElement); 할당 조작이 이렇게 나타났습니다!해결 방안:정의=조작부호
A &operator=(A&) { return *this; }
http://blog.csdn.net/vincent_lon/article/details/2950218
또한 CArray 매개 변수를 전송 CArray arr로 변경하면오류:
"CObject::CObject":private 구성원에 접근할 수 없습니다. ("CObject"클래스에서 설명합니다)
add의 매개 변수가 값 전달이 되면 복제 구조 함수 지원이 필요합니다. 우리의 클래스는 없습니다. CArray 역시 없습니다. CObject는 있지만 개인적이기 때문에 컴파일 오류가 발생합니다. 해결 방안은 복사 구조 함수를 정의하는 것입니다.
A(A &){} A(){}
무변수 구조 함수를 다시 정의하는 것을 잊지 마라
결론: 당신의 클래스에 캐리 멤버가 있을 때,
1값 형식, 클래스를 위한 무변수 구조 함수, 복사 구조 함수와 = 재부팅 함수.
2 인용 유형, = 조작부호, 무변수 구조 함수
ps : 2014.6.18
"CObject::operator=":private 구성원에 접근할 수 없습니다("CObject"클래스에서 설명)
"CObject::CObject":private 구성원에 접근할 수 없습니다. ("CObject"클래스에서 설명합니다)
CArray는 CObject를 계승하고 CArray는 매개 변수가 없는 기본 구조 함수만 현저하게 정의하며 복사 구조와 값 부여 조작부호 재부팅 함수를 정의하지 않습니다. A는 관련 함수를 정의하지 않은 상황에서 복사 또는 값 부여 조작을 할 때
클래스의 각 구성원 대상의 복사와 값 부여 조작부호 재부팅 함수를 순서대로 호출하고, CArray 대상에 대해서는 복사와 값 부여 조작부호 재부팅 함수를 현시적으로 정의하지 않기 때문에 컴파일러는 자동으로 생성된copy 및 "함수 중 기본 클래스 CObject의 복사 구조와"= "조작부호 함수를 호출하며, 이 두 함수는 CObject에 의해 private 권한으로 성명되어 파생 클래스 CArray에서도 접근할 수 없습니다.
결과:
하나의 기류를 설계할 때
1. 이 클래스가 직접 실례화되는 것을 금지하고 구조 함수를 private or protected로 명시하며 private로 명시될 때 이 클래스와 그 모든 파생 클래스를 실례화할 수 없다. 예를 들어:
class A
{
private:
A(){}
};
class B : public A
{
public:
B(){}
}; error C2248: "A: A":private 구성원에 접근할 수 없습니다. ("A"클래스에서 설명합니다)
2. 만약에 안전한 고려에 처해 있으면 파생 클래스가 현식 정의 복제 제어(복제 구조와 값 부여 조작부호 함수)를 강요하면 2개의 복제 제어 함수를private로 명시할 수 있고 보호된 것으로 명시되면 클래스와 파생 클래스 체내에서만 대상 복제 작업을 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.