首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++ 'CA2W':找不到标识符

c++ 'CA2W':找不到标识符
EN

Stack Overflow用户
提问于 2010-10-10 12:15:05
回答 5查看 15.4K关注 0票数 1

为什么我得到'CA2W':找不到标识符

代码语言:javascript
运行
复制
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
      }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-10 13:17:06

编辑:

OP刚刚告诉我Visual Studio2010学习版是用来编译代码的。这就解释了为什么找不到CA2W,因为Express版本没有包含整个ATL/MFC库。因此,我最初的回答与OP无关。

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

您可以不使用CA2W,而是使用MultiByteToWideChar() -此函数实际上是CA2W用来转换字符串的函数,因此您将得到基本相同的结果。

Here's a usage example of MultiByteToWideChar() in an answer to another Stack overflow question。它用于从std::stringLPCWSTR的转换,但它基本上是相同的过程。

原始答案:

根据the documentation for ATL and MFC String Conversion Macros的说法,你必须包括:

代码语言:javascript
运行
复制
#include <atlbase.h>
#include <atlconv.h>

int main()
{ 
    // Explicitly qualified the CA2W identifier
    ATL::CA2W("Hello World!"); // Test to see if this compiles
} 

我认为这段代码之前不能工作的原因是因为你在#include <atlbase.h>之前的某个地方#define'd _ATL_NO_AUTOMATIC_NAMESPACE

票数 9
EN

Stack Overflow用户

发布于 2010-10-10 12:17:22

给我们看你的代码,否则我们无能为力。

你得到的错误是:“CA2W到底是什么?”

这意味着您正在使用标识符CA2W,但尚未将其声明为任何内容。

票数 3
EN

Stack Overflow用户

发布于 2010-10-10 12:47:25

因此,尝试这样做-创建一个Win32控制台项目,然后用下面的代码替换给定的代码,它对我来说编译得很好。如果这不能为你编译,我被难住了--也许重新安装Visual Studio?似乎有多个人可以正确地编译它,那么您的Visual Studio安装可能出了什么问题?

代码语言:javascript
运行
复制
// 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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3898999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档