我在编译C ++类时遇到错误,它与从方法返回的Struct有关。我已将代码条带化为最小值,但仍然会出现错误。我正在使用Visual Studio 6.0。
代码
// TestClass.cpp: implementation of the TestClass class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TestClass.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TestClass::TestClass()
{
}
TestClass::~TestClass()
{
}
ProductInfo TestClass::GetProdInfo()
{
ProductInfo PI;
return PI;
}
// TestClass.h: interface for the TestClass class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TestClass_H__081E411D_44F9_4E0B_9FE7_CF6F708BE769__INCLUDED_)
#define AFX_TestClass_H__081E411D_44F9_4E0B_9FE7_CF6F708BE769__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class TestClass
{
public:
struct ProductInfo
{
char cCode;
char cItem[20];
long lValue;
};
public:
TestClass();
virtual ~TestClass();
private:
ProductInfo GetProdInfo();
};
#endif // !defined(AFX_TestClass_H__081E411D_44F9_4E0B_9FE7_CF6F708BE769__INCLUDED_)
收到错误
Compiling...
TestClass.cpp
C:\Work\TestStruct\TestClass.cpp(22) : error C2143: syntax error : missing ';' before 'tag::id'
C:\Work\TestStruct\TestClass.cpp(22) : error C2501: 'ProductInfo' : missing storage-class or type specifiers
C:\Work\TestStruct\TestClass.cpp(22) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
TestStruct.exe - 3 error(s), 0 warning(s)
为什么我会收到这些错误?
由于
答案 0 :(得分:2)
ProductInfo
是TestClass
中的嵌套类,因此您必须在此处保留命名空间。
TestClass::ProductInfo TestClass::GetProdInfo()
标准说:
9.7嵌套类声明
如果在命名空间作用域中定义了类 X ,则嵌套类 Y 可能是 在类X中声明,稍后在类X或类的定义中定义 稍后在包含定义的命名空间范围中定义 X级。
7.3.1命名空间定义
声明的封闭名称空间是声明词汇出现的名称空间, 除了在其原始命名空间之外重新声明命名空间成员(例如,定义为 7.3.1.2中规定的。这样的重新声明具有与原始声明相同的封闭名称空间。
答案 1 :(得分:0)
您必须取消嵌套结构或更改GetProdInfo
TestClass::ProductInfo TestClass::GetProdInfo()
{
ProductInfo PI;
return PI;
}