c2664错误c语言,vc10的C2664和C2065错误

在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

#include

int main(int argc, char* argv[])

{

const double Pi = 3.14;

double dRadius = 3;

if (argc > 1) {

dRadius = atof(argv[1]);

}

cout<

Circular *circular = new Circular(Pi);

double dArea = circular->getArea(dRadius);

cout<

double dCircumference = circular->getCircumference(dRadius);

cout<

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<

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

VC6:

#include // vc6 - atof()

#include // vc6 - cout // vc6 - endl    VC10:

// vc10 - cout & endl

using namespace std;

#include

更改完的主程序(在VS2010运行通过)

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

//

#include "stdafx.h"

#include "Circular.h"

//#include // vc6 // atof()

//#include // vc6 // count & endl

using namespace std; // vc10

#include // vc10

int _tmain(int argc, _TCHAR* argv[])

{

const double Pi = 3.14;

double dRadius = 3;

if (argc > 1) {

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

dRadius = _wtof(argv[1]);

}

cout<

Circular *circular = new Circular(Pi);

double dArea = circular->getArea(dRadius);

cout<

double dCircumference = circular->getCircumference(dRadius);

cout<

return 0;

}

--------------------------------------------------------------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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值