C++错误 ERROR C3861

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++错误 ERROR C3861相关的知识,希望对你有一定的参考价值。

#include "stdafx.h"
#include "iostream"
using namespace std;
void main()

int n ;
cout<<"please input a number n to calculate n!:";
cin>>n;
cout<<n<<"!="<<fac(n)<<endl;

卧槽 照着书打也会错 真是操蛋啊

  因为要调用别人写的一些结构函数,在自己工程中添加了对应的a.cpp和a.h文件(非封装类,普通文件),里面包含max()和min()函数,结果包含对应头文件后出现如题的错误:
  error C3861: “max”: 找不到标识符;
  解决办法:
  1、在添加的a.h文件中#define了max和min函数,编译出现max、min重定义错误,(因为系统默认头文件windef.h中也定义了相应函数,造成重定义)
  2、在a.h中包含windef.h,提示windef.h中有些莫名其妙的错误,因为是系统文件确认应该这样添加应该是错误的
参考技术A #include "stdafx.h"
#include <iostream>
using namespace std;
 
long fac(int n)  //阶乘通常比较大,所以可以用long int 类型做返回值

       long ret=1;
       for(int i=2;i<=n;i++)
       
              ret=ret*i;        //不断地累乘
       
       return ret;

 
void main()

       int n ;
       cout<<"please input a number n to calculate n!:";
       cin>>n;
       cout<<n<<"!="<<fac(n)<<endl;

参考技术B fac是什么?
另外标准库函数iostream的包含最好用尖括号<iostream>追问

阶乘思密达 我是照着书打的啊

追答

这个函数没实现,你在main函数前实现一个结成的函数应该就可以了,我编译没问题的。
int fac(int n)

if(n == 1) return 1;
if(n == 2) return 2;
return n*fac(n-1);

本回答被提问者采纳

c++错误:error LNK2001

//空的虚函数到底有什么用?能否举例说明一下,谢谢了
//派生类并不一定必须实现基类中的虚函数,如果派生类想通过虚函数机制则必须建立一条从积累到派生类的虚函数路径。许多没有使用虚函数的中间类也必须声明该函数,以保证其后的派生类能使用该虚函数。这样的话,声明一个虚函数就可以达到其目的。

//例如:

#include <iostream.h>

class A


public:

virtual void printOn()cout<<"Class A"<<endl;
;

class B: public A


public:

void printOn()

;

class C: public B

public:

void printOn()cout<<"Class C"<<endl;
;

void Show(A*a)



a ->printOn();



void mian()



A *a = new A;

B *b = new B;

C *c = new C;

Show (a);

Show (b);

Show (c);


//通过上面简单的程序可以看出,虚函数B声明为空,它的意义在于,类B并不需要pringOn()函数,
//声明它是为了保证B的派生类能使用类A的虚函数界面,使调用show(c)能沿着从A对象的虚函数路径正确存取C::printOn()虚函数。

结果出现错误:
--------------------Configuration: Ex_VirtualFunc - Win32 Debug--------------------
Compiling...
1.cpp
Linking...
LIBCMTD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Ex_VirtualFunc.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Ex_VirtualFunc.exe - 2 error(s), 0 warning(s)
重点问题:我觉得虚函数实现多态性没多大意义啊!
这样做还要先定义几个指向基类的指针,还要再给它们赋值各个子类对象的地址。
还不如我直接定义每个子类的对象,再用该对象直接调用各个子类???

错误原因:main(),拼成了mian().

虚函数的作用是允许在派生类中对积累的虚函数重新定义,即在同一类族中对同一消息做出不同的响应。
原来的程序若不用虚函数相当于:
A *a = new A;
a ->printOn();
B *b = new B;
b ->printOn();
C *c = new C;
c ->printOn();

用虚函数可简化为:
A *a = new A;

a ->printOn();

a = new B;

a ->printOn();

a = new C;

a ->printOn();

少申请了两个指针。
参考技术A 小农不才~~ 请你在新建工程的 时候先把Win32 Applicatioan 换成
Win32 Console Applicatioan 然后再看看~~~

以上是关于C++错误 ERROR C3861的主要内容,如果未能解决你的问题,请参考以下文章

error C3861: “getpid”: 找不到标识符

编译错误 C3861 Visual Studio 2010

错误 C3861:“strtoll”:未找到标识符

错误 C3861:“系统”:未找到标识符

错误 C3861:“_beginthreadex”:未找到标识符

VC ++ WINAPI窗体:找不到标识符(C3861错误)