C ++类中导致编译错误的结构

时间:2015-09-15 20:39:20

标签: c++ visual-c++ struct

我在编译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)

为什么我会收到这些错误?

由于

2 个答案:

答案 0 :(得分:2)

ProductInfoTestClass中的嵌套类,因此您必须在此处保留命名空间。

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;
}