在vs2010中编译一个普通的C++程序(Win32 Console Application),都会出现这两个错误!

究其原因是:我们已经习惯了VC6的种种简陋和不规范!

例如,下列程序在VC6中编译通过。

主程序:testCir2.cpp

// testCir2.cpp : Defines the entry point for the console application.
// #include "stdafx.h" #include "circular.h"
#include <stdlib.h>
#include <iostream.h> int main(int argc, char* argv[])
{
const double Pi = 3.14;
double dRadius = 3;
if (argc > 1) {
dRadius = atof(argv[1]);
} cout<<"你输入的半径为: "<<dRadius<<endl; Circular *circular = new Circular(Pi); double dArea = circular->getArea(dRadius);
cout<<"面积为:"<<dArea<<endl; double dCircumference = circular->getCircumference(dRadius);
cout<<"周长为:"<<dCircumference<<endl; return 0;
}

但是在vc10中就会出现:

1. C2664: 'atof' : cannot convert parameter 1 from '_TCHAR *' to 'const char *'

dRadius = atof(argv[1]); // vc6 // C2664: 'atof' : cannot convert parameter 1 from '_TCHAR *' to 'const char *'

原因是:VC10中使用了unicode定义的变量;我们的MBCS定义的函数无法进行转换工作。

TCHAR.H routine

_UNICODE & _MBCS not defined

_MBCS defined

_UNICODE defined

_tstof

atof

atof

_wtof

_ttof

atof

atof

_wtof

更改为:

dRadius = _wtof(argv[1]);

即可解决C2664错误。

2. C2065: 'cout' : undeclared identifier

C2065: 'endl' : undeclared identifier

我们经常使用的cout和endl怎么变成了不识别的了?

原因是:VC10给标准函数使用了命名空间。

解决方法有2种
        (1) 强制使用命名空间

using namespace std;

(2) 在标准函数前加前缀

std::cout<<"你输入的半径为: "<<dRadius<<std::endl;

最后,要注意引用的不同:

VC6:

#include <stdlib.h> // vc6 - atof()
#include <iostream.h> // vc6 - cout // vc6 - endl

VC10:

// vc10 - cout & endl
using namespace std;
#include <iostream>

--------------------------------------------------------------xiaobin_hlj80--------------------------

附:类文件

头文件:circular.h

// circular.h: interface for the Circular class.
//
////////////////////////////////////////////////////////////////////// #if !defined(AFX_CIRCULAR_H__612399AD_E8A7_433A_BD63_6C1F29BAC83E__INCLUDED_)
#define AFX_CIRCULAR_H__612399AD_E8A7_433A_BD63_6C1F29BAC83E__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 class Circular
{
public:
Circular(double pi);
virtual ~Circular(); double PI; double getArea(double radius); double getCircumference(double radius); }; #endif // !defined(AFX_CIRCULAR_H__612399AD_E8A7_433A_BD63_6C1F29BAC83E__INCLUDED_)

源文件:circular.cpp

// circular.cpp: implementation of the Circular class.
//
////////////////////////////////////////////////////////////////////// #include "stdafx.h"
#include "circular.h" //////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Circular::Circular(double pi)
{
PI = pi;
} Circular::~Circular()
{ } double Circular::getArea(double radius) {
return PI * (radius * radius);
} double Circular::getCircumference(double radius) {
return PI * (radius * 2);
}

vc10的C2664和C2065错误的更多相关文章

  1. Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包括基本输入输出机制介绍

    Some Basic Background Story of The Win32 APIs Win32 API背景故事/背景知识 The Win32 application programming i ...

  2. 航空概论(历年资料,引之百度文库,PS:未调格式,有点乱)

    航空航天尔雅 选择题1. 已经实现了<天方夜谭>中的飞毯设想.—— A——美国2. 地球到月球大约—— C 38 万公里3. 建立了航空史上第一条定期空中路线—— B——德国4. 对于孔明 ...

  3. error C2065:未声明的标识符错误

    原文地址:http://blog.sina.com.cn/s/blog_8216ada701017evx.html 在VS2010下进行VC++调试时,出现这样一种错误:error C2065:未声明 ...

  4. error C2664 转换错误汇总[转]

    vs2005提示 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”. 在用vs2005编写mfc程序的时 ...

  5. VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法

    问题描述: VC++程序编译时提示错误:error C2065: “HANDLE”: 未声明的标识符等众多错误提示,如下所示: error C2065: “HANDLE”: 未声明的标识符 error ...

  6. error C2065:!错误:未定义标识符“pBuf);”

    error C2065: “pBuf):”: 未声明的标识符 错误原因:第二个括号)使用的是中文符号!还有最后那个分号! 改回来就好了~ 原错误: 修正后错误消失:

  7. MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符

    添加了一个Dialog资源,修改了ID之后右击资源添加了一个类,在类里面有一个成员变量: // 对话框数据    enum { IDD = IDD_GETIN }; 而在编译过程中出现报错,错误代号是 ...

  8. 引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符

    今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error. >e:\c++\button_fly2\b ...

  9. Visual Studio 2010 error C2065: '_In_opt_z_' : undeclared identifier 编译错误

    当用Visual Studio 2010 编译时 发生如下编译错误: 2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\inclu ...

随机推荐

  1. 使用HashMap对象传递url參数有用工具类

    代码例如以下: package com.yanek.util; import java.util.ArrayList; import java.util.Collections; import jav ...

  2. PCM文件格式简单介绍

    PCM文件格式简单介绍 PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志.Windows的Convert工具能够把PCM音频格式的文件转换成M ...

  3. 验证docker的Redis镜像也存在未授权访问漏洞

    看到了这篇老外的博客:Over 30% of Official Images in Docker Hub Contain High Priority Security Vulnerabilities于 ...

  4. Oracle 监听配置详解(转载)

        使用ORACLE的SQL*Net V.2连接客户机和服务器,需配置每个客户机和服务器.在服务器上需配置的文件有:listener.ora./etc/services,在客户机上需配置tnsna ...

  5. 头文件 .h 与源文件 .ccp 的区别

    .h 文件一般是用来定义的,比如定义函数.类.结构体等: .cpp 文件则是对头文件的定义进行实现. include .h文件,可以调用你声明的函数.类等.当然,比较简单的类.函数,你也可以直接在头文 ...

  6. Qt添加窗口背景图片、Label图片显示、、Label文字显示

    一.添加窗口背景图片 重写MainWindow绘制事件 void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this) ...

  7. Lightoj1009 Back to Underworld(带权并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Back to Underworld Time Limit:4000MS      ...

  8. (原)torch中显示nn.Sequential()网络的详细情况

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6065526.html 本部分多试几次就可以弄得清每一层具体怎么访问了. step1. 网络定义如下: ...

  9. 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用

    1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...

  10. struts.custom.i18n.resources国际化详解(一)

    每种框价都会有国际化的支持,struts2的国际化大致上分为页面的国际化,Action的国际化以及xml的国际化 首先在struts.properties文件中加入以下内容:struts.custom ...