明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题。

举个简单的例子

class CTest
{
	void (CTest::*m_pFun)();

	void CallFun()
	{
		(this->*m_pFun)();	//OK,对象指针和函数名一定要用括号括起来,函数名前面要加上*号
		this->*m_pFun();	//error
		(this->m_pFun)();	//error
	}
        //本文链接http://www.cnblogs.com/vcpp123/p/5902839.html
};

详细说明请参阅MSDN,链接:https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=ZH-CN&k=k(C2064)&rd=true

编译器错误 C2064

term does not evaluate to a function taking N arguments

A call is made to a function through an expression.The expression does not evaluate to a pointer to a function that takes the specified number of arguments.

In this example, the code attempts to call non-functions as functions.The following sample generates C2064:

// C2064.cpp
int i, j;
char* p;
void func() {
	j = i();    // C2064, i is not a function
	p();        // C2064, p doesn‘t point to a function
}

You must call pointers to non-static member functions from the context of an object instance.The following sample generates C2064, and shows how to fix it:

// C2064b.cpp
struct C {
	void func1() {}
	void func2() {}
};

typedef void (C::*pFunc)();

int main() {
	C c;
	pFunc funcArray[2] = { &C::func1, &C::func2 };
	(funcArray[0])();    // C2064
	(c.*funcArray[0])(); // OK - function called in instance context
}

Within a class, member function pointers must also indicate the calling object context.The following sample generates C2064 and shows how to fix it:

// C2064d.cpp
// Compile by using: cl /c /W4 C2064d.cpp
struct C {
	typedef void (C::*pFunc)();
	pFunc funcArray[2];
	void func1() {}
	void func2() {}
	C() {
		funcArray[0] = &C::func1;
		funcArray[1] = &C::func2;
	}
	void func3() {
		(funcArray[0])();   // C2064
		(this->*funcArray[0])(); // OK - called in this instance context
	}
};
时间: 2024-10-11 06:39:49

明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064的相关文章

数学表达式检查(一)括号匹配

接下来要讲的是我自己曾经做的一个项目中的一个小内容. 对于数学表达式的括号检查.比如数学表达式(3+2)*sin(30+((2+1)))+sum[1,(cos(2)),3]是一个 正确的表达式,其中一部分是对其表达式中括号的检查. 现在给你一个字符串s,如何判断它的括号是否匹配. 我们采用压栈的处理方式. 遍历字符串中的每个字符,当遇到开括号时压栈, 当遇到闭扩号时,如果栈为空,则表示不匹配.如果不为空,出栈,并判断出栈的开括号是否与该闭括号匹配. 如果遍历结束后,栈不为空,也表示不匹配. 数学

利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)

利用栈判断输入的表达式中的括号是否匹配(假设只含有左.右括号) bool Match(char exp[],int n) { int i=0; char e; bool match=true; SqStack *st; InitStack(st);//初始化栈 while(i<n && match)//扫描exp中所有字符 { if(exp[i]=='(')//当前字符为左括号,将其进栈 Push(st,exp[i]); else if(exp[i]==')')//当前字符为右括号

C#调用Excel报 error CS1969: 找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

转自[http://blog.csdn.net/bodybo/article/details/43191319] 程序需要读取Exel文件,有如下代码段 [csharp] view plaincopy object oMissing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Applicati

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例 EL表达式 1.获取域对象中的值 2.EL表达式支持运算 ${ num1 + num2 } EL获取常用的WEB对象 1.pageScope 获取page域对象的值 2.requestScope 获取request域对象的值 3.sessionScope 获取session域对象的值 4.applicationScope 获取application域对象的值 * 例子:向某个域中来存入值 req

?c++ 调用DLL函数,出现错误

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. 错误原因

C与python的调用一(导入python模块与,获得函数与类)

python是一门很优秀的脚本语言,语法简洁而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块. 但是python的界面设计我们并不是很熟悉(虽然他也有很多很好的且功能强大的类库,例如wxpython等,但是相比其他的GUI设计,我们可能更加 熟悉QT或者MFC,因此不太会选用python作为界面设计的工具),所以我们在很多情况下,很难在有界面需求的项目中使用python的GUI去设 计.但是这样并不意味着我们不能依靠python的高效,简洁去做一些东西

逗我玩吗?ViewBag.XXX 找不到编译动态表达式所需的一种或多种类型

现在接手的项目是用 .NET 4 + MVC4 做的. 我尝试着用 Unity 变更一下其中的一个功能的实现. 但是 Unity.MVC4 依赖于 Unity 3 以上的版本, Unity 3 又依赖于 .NET 4.5, Unity.MVC3 又只能用于 MVC3 的项目 . 按我的性格就是要把整个工程改为 .NET 4.5 的算球了, 但是有有同事说 .NET 4.5 是新东西,不知道稳定不稳定. 至于稳定不稳定, 我无从考证. 不用 .NET 4.5 , 那只好自己实现对 Controll

找不到编译动态表达式所需的一种或多种类型

找不到编译动态表达式所需的一种或多种类型 2011-12-15 14:15:02| 分类: c#程序设计 | 标签: |举报 |字号大 中 小 订阅 问题描述:Office 打印时,引用了Microsoft.Office.Interop.Excel Excel.Application xlsApp = new Excel.Application(); xlsApp.Visible = true; Excel.Workbooks xlsWbs = xlsApp.Workbooks; Excel.W

利用多线程实现并发调用,实现一个存钱多人取钱函数

1 package com.thread; 2 3 /** 4 * @author lisj 5 * 利用多线程实现并发调用 6 * 根据条件实现线程的等待和运行 7 */ 8 9 public class ThreadMoney { 10 11 public static void main(String args[]){ 12 13 Moneyclass money=new Moneyclass(); //实例化Money类 14 getmoney son1=new getmoney(mon