2017-12-04 22 views
0
 
function: 
name: make_shape 
return: Shape* 
parameters: const string &shape_name; const vector &data 

클래스는 ShapeFactory입니다. 이것은 내가이 함수의 정의가 무엇 :C++ 반환 유형 포인터 선언

ShapeFactory::Shape* make_shape(const string &shape_name, const vector<double>&data) 

나는 말한다 오류 얻을 :

"ShapeFactory.cpp:17:15: error: ‘Shape’ in ‘class ShapeFactory’ does not name a type"

내가 Shape*는 반환 형식이 아니라는 것을 알고,하지만 난 선언하는 방법을 모른다 포인터 어떤 제안?

+5

아마'모양은 * ShapeFactory :: make_shape (const를 문자열 및 shape_name, const를 벡터 및 데이터)'1 –

+2

은'ShapeFactory :: Shape'은 올바른 것이 Shape'가있다'경우 ShapeFactory 클래스 내부의 중첩 클래스. – Barmar

+0

신난다, 고마워! – Miraclefruit

답변

2

컴파일러가 ShapeFactory의 함수 구현 인 것으로 생각하는 ShapeFactory::Shape* make_shape을 작성했습니다. Shape*이라고합니다. 이 전에 반환 형식이 있어야하며 :: 뒤에 오는 비트는 이름이 인 함수입니다. 따라서, 올바른 코드는 다음과 같습니다

Shape* ShapeFactory::make_shape(const string 
&shape_name, const vector<double>&data) 
+0

컴파일러는'ShapeFactory :: Shape * make_shape'가'Shape *'이라는 ShapeFactory의 함수라고 생각하지 않습니다. 'ShapeFactory :: Shape *'은 리턴 타입이고'make_shape'는 (ShapeFactory 클래스 내에서이 함수가 선언되지 않는 한 독립형 함수의) 함수 이름입니다. 오류 메시지는 특히'ShapeFactory'가'Shape'라는 이름의 중첩 된 타입을 정의하지 않는다는 것을 말해줍니다. 그래서'ShapeFactory :: Shape *'은 사용할 잘못된 반환 타입입니다. 아마도'Shape'는 독립 실행 형 클래스이므로 프로젝트 유형과 마찬가지로 반환 유형은'Shape * '이어야합니다. –