C++ c++';CA2W';:找不到标识符

C++ c++';CA2W';:找不到标识符,c++,visual-c++,winapi,C++,Visual C++,Winapi,为什么获取“CA2W”:找不到标识符 for(DWORD i = 0; i < numMaterials; i++) // for each material... { material[i] = tempMaterials[i].MatD3D; // get the material info material[i].Ambient = material[i].Diffuse; // make ambient the same a

为什么获取“CA2W”:找不到标识符

for(DWORD i = 0; i < numMaterials; i++)    // for each material...
    {
        material[i] = tempMaterials[i].MatD3D;    // get the material info
        material[i].Ambient = material[i].Diffuse;    // make ambient the same as diffuse
        USES_CONVERSION;    // allows certain string conversions
        // if there is a texture to load, load it
        D3DXCreateTextureFromFile(d3ddev,
                                            CA2W(tempMaterials[i].pTextureFilename),
                                            &texture[i]);
        texture[i] = NULL;    // if there is no texture, set the texture to NULL
      }
for(DWORD i=0;i
向我们展示您的代码,否则我们将无能为力

您得到的错误意味着:“什么是CA2W


这意味着您正在使用标识符CA2W,但它没有被声明为任何东西。

显示您的代码,否则我们将无能为力

您得到的错误意味着:“什么是CA2W


这意味着您正在使用标识符CA2W,但它没有被声明为任何东西。

因此,请尝试此操作-创建一个Win32控制台项目,然后用下面的代码替换给定代码,该代码对我来说可以编译。如果这不能为您编译,我会很困惑-也许重新安装Visual Studio?似乎有很多人可以正确地编译它,那么您的VisualStudio安装有什么问题呢

// testconv.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <atlconv.h>
#include <atlbase.h> 
#include <atlstr.h>

int _tmain(int argc, _TCHAR* argv[])
{
   USES_CONVERSION;
   WCHAR *pChar = CA2W(NULL);
    return 0;
}
//testconv.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
int _tmain(int argc,_TCHAR*argv[]
{
使用_转换;
WCHAR*pChar=CA2W(空);
返回0;
}

所以试试这个-创建一个Win32控制台项目,然后用下面的代码替换给定的代码,这对我来说很好。如果这不能为您编译,我会很困惑-也许重新安装Visual Studio?似乎有很多人可以正确地编译它,那么您的VisualStudio安装有什么问题呢

// testconv.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <atlconv.h>
#include <atlbase.h> 
#include <atlstr.h>

int _tmain(int argc, _TCHAR* argv[])
{
   USES_CONVERSION;
   WCHAR *pChar = CA2W(NULL);
    return 0;
}
//testconv.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
int _tmain(int argc,_TCHAR*argv[]
{
使用_转换;
WCHAR*pChar=CA2W(空);
返回0;
}
编辑:OP刚刚告诉我Visual Studio 2010 Express用于编译代码。这就解释了为什么找不到
CA2W
,因为Express版本不包含整个ATL/MFC库。因此,我最初的答案与OP无关

故事的寓意:在问这类问题时,一定要确切地提到你所处的环境。

与使用
CA2W
不同,您可以使用-此函数是
CA2W
实际用于转换字符串的函数,因此您将得到基本相同的结果

。它用于从
std::string
LPCWSTR
的转换,但基本上是相同的过程

原始答案:根据要求,您必须包括:

#include <atlbase.h>
#include <atlconv.h>

int main()
{ 
    // Explicitly qualified the CA2W identifier
    ATL::CA2W("Hello World!"); // Test to see if this compiles
} 
#包括
#包括
int main()
{ 
//显式限定CA2W标识符
ATL::CA2W(“Hello World!”);//测试是否编译
} 
我认为这个代码片段以前不起作用的原因是因为您在
\include
编辑之前的某个地方定义了
\define
'd
\u ATL\u NO\u AUTOMATIC\u NAMESPACE
:OP刚刚告诉我Visual Studio 2010 Express是用来编译代码的。这就解释了为什么找不到
CA2W
,因为Express版本不包含整个ATL/MFC库。因此,我最初的答案与OP无关

故事的寓意:在问这类问题时,一定要确切地提到你所处的环境。

与使用
CA2W
不同,您可以使用-此函数是
CA2W
实际用于转换字符串的函数,因此您将得到基本相同的结果

。它用于从
std::string
LPCWSTR
的转换,但基本上是相同的过程

原始答案:根据要求,您必须包括:

#include <atlbase.h>
#include <atlconv.h>

int main()
{ 
    // Explicitly qualified the CA2W identifier
    ATL::CA2W("Hello World!"); // Test to see if this compiles
} 
#包括
#包括
int main()
{ 
//显式限定CA2W标识符
ATL::CA2W(“Hello World!”);//测试是否编译
} 

我认为这个代码片段以前不起作用的原因是因为您在
\include
之前的某个地方定义了
\define
'd
\u ATL\u AUTOMATIC\u NAMESPACE
检查ATL头文件
atlconv.h
atlbase.h
的路径是否对Visual Studio可见

在垄断.cpp文件中,右键单击行
#include
,然后选择打开文档atlconv.h。如果头文件正确打开,则表示位置没有问题。相反,如果它抛出一个错误,则意味着VStudio无法定位该文件,这就是它显示“未找到标识符”的原因


在错误消息中,VStudio显示其查找头文件的文件夹的路径。检查列表是否包含类似于“C:\Program Files(x86)\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include”的路径,其中存在ATL头文件。如果缺少该路径,请按如下方式包括该路径(使用适合您的操作系统和您正在使用的VStudio版本的路径):Visual Studio:工具->选项->项目和解决方案->VC++目录->显示包含文件的目录.

检查ATL头文件
atlconv.h
atlbase.h
的路径是否对Visual Studio可见

在垄断.cpp文件中,右键单击行
#include
,然后选择打开文档atlconv.h。如果头文件正确打开,则表示位置没有问题。相反,如果它抛出一个错误,那么我