我在 VC2010 中有一个代码,我将其简化为一个小例子。
Test.h:
#pragma once
template <typename TPixel>
struct Image
{
typedef TPixel PixelType;
};
template <typename TImageType>
struct Operation
{
void DoOperation()
{
ImageType::PixelType value = 0;
// I've done a misprint here. It should be TImageType::PixelType
}
};
Test.cpp:
void Test()
{
typedef Image<char> ImageType;
Operation<ImageType> op;
op.DoOperation();
}
正如我所料,这会产生错误。
test.h(14): error C2653: 'ImageType' : is not a class or namespace name
现在,让我们test.cpp
稍微改变一下。
typedef Image<char> ImageType;
void Test()
{
Operation<ImageType> op;
op.DoOperation();
}
现在它编译了!令人惊讶的是,ImageType
inDoOperation()
现在与全局 typedef in 匹配test.cpp
。
我的问题:为什么要编译?这是 Visual C++ 错误还是标准行为?