简体   繁体   中英

Does Not Name A Type in C++

in C++ when i get an error that says xxxxx does not name a type in yyy.h

What does that mean?

yyy.h has included the header that xxxx is in.

Example, I use:

typedef CP_M_ReferenceCounted FxRC;

and I have included CP_M_ReferenceCounted.h in yyy.h

I am missing some basic understanding, what is it?

That seems you need to refer to the namespace accordingly. For example, the following yyy.h and test.cpp have the same problem as yours:

//yyy.h
#ifndef YYY_H__
#define YYY_H__

namespace Yyy {

class CP_M_ReferenceCounted
{
};

}

#endif

//test.cpp
#include "yyy.h"

typedef CP_M_ReferenceCounted FxRC;


int main(int argc, char **argv)
{

        return 0;
}

The error would be

...error: CP_M_ReferenceCounted does not name a type

But add a line "using namespace Yyy;" fixes the problem as below:

//test.cpp
#include "yyy.h"
// add this line
using namespace Yyy;

typedef CP_M_ReferenceCounted FxRC;
...

So please check the namespace scope in your .h headers.

包含CP_M_ReferenceCounted类型可能是词法上的,因为typedef ...你可以直接链接到这两个文件,还是在一个简单的样本中重现问题?

Although possibly unrelated to OP's original question... this is an error I just had and shows how this error could occur.

When you define a type in a C++ class and you return it, you need to specify the class in which the type belongs.

For example:

class ClassName{
public:
 typedef vector<int> TypeName;
 TypeName GetData();
};

Then GetName() must be defined as:

ClassName::TypeName ClassName::GetData(){...}

not

TypeName ClassName::GetData(){...}

Otherwise the compiler will come back with the error:

error: 'TypeName' does not name a type

Be sure you didn't copy paste this yyy.h file from some other class header and keep the same "YYY_H__" in the new #ifndef as in the original file. I just did this and realized my mistake. Make sure to update your new YYY_H__ to represent the new class. Otherwise, obviously, YYY_H__ will already be defined from the original file and the important stuff in this header will be skipped.

是的,您应该首先尝试检查namespace

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM