`

编译器报:未调用原型函数(是有意用变量定义的吗?)(本文为原创,转载清注明出外)

F# 
阅读更多
MSDN解释:编译器检测到未使用的函数原型。如果有意将该原型作为变量声明,则移除左/右括号。什么意思,简单来说,就是编译无法分辨你当前的代码是在声明一个函数原型,还是在调用一个函数.因为在VS编译器里这样声明一个函数是正确的:test(int(a),int(b)),但我们经常用他做为函数调用来使用。
Code
// compile with: /W1
class Lock {
public:
   int i;
};

void f() {
   Lock theLock();  
   // try the following line instead
   // Lock theLock;
}

int main() {
}
当然你的意图是调用一个无参构造函数,然而编译器却认为你在声明一个函数.所以报错了.

解决方法是这样调用:test((int(a)),(int(b)));编译通过!!

附MSDN的一个例程:



Code
class BooleanException
{
   bool _result;

public:
   BooleanException(bool result)
      : _result(result)
   {
   }

   bool GetResult() const
   {
      return _result;
   }
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
   IfFailedThrow(bool result)
   {
      if (!result)
      {
         throw T(result);
      }
   }
};

class MyClass
{
public:
   bool Foo()
   {
      try
      {
         IfFailedThrow<>(MyMethod()); //error

         // try one of the following lines instead
         // IfFailedThrow<> ift(MyMethod());
         // IfFailedThrow<>(this->MyMethod());
         // IfFailedThrow<>((*this).MyMethod());

         return true;
      }
      catch (BooleanException e)
      {
         return e.GetResult();
      }
   }

private:
   bool MyMethod()
   {
      return true;
   }
};

int main()
{
   MyClass myClass;
   myClass.Foo();
}
//在上面的示例中,不含参数的方法的结果作为参数传递给未命名本地类变量的构造函数。该调用会产生歧义:既可以是命名本地变量,也可以是使用对象实例以及相应的指向成员的指针运算符给方法调用加前缀。



分享到:
评论

相关推荐

    C++调用C函数实例详解

    C++调用C函数实例详解 前言:以前见到extern “C”这样的语句,只是简单地知道跟外部链接有关,但是没有深刻理解它的意思。 首先,为什么要使用extern “C”修饰符? C++调用其它语言的函数,由于编译器生成函数的...

    剖析C++函数调用约定

    Visual C/C++的编译器提供了几种函数调用约定,了解这些函数调用约定的含义及它们之间的区别可以帮助我们更好地调试程序。在这篇文章里,我就和大家共同探讨一些关于函数调用约定的内容。 Visual C/C++的编译器支持...

    编译器构造:C语言描述

    编译器、编译器构造,用C语言来描述

    函数调用约定与函数名称修饰规则

    函数调用方式决定了函数参数入栈的顺序,是由调用者函数还是被调用函数负责清除栈中的参数等问题,而函数名修饰规则决定了编译器使用何种名字修饰方式来区分不同的函数,如果函数之间的调用约定不匹配或者名字修饰不...

    [编译器构造:C语言描述].(费希尔等).郑启龙等.扫描版.rar

    [编译器构造:C语言描述].(费希尔等).郑启龙等.扫描版.rar 讲解编译器很好的外国教材

    [编译器构造:C语言描述].(费希尔等)(内涵链接)

    [编译器构造:C语言描述].(内涵链接)

    如何使用MVSC编译器生成XFG函数原型哈希 .pdf

    如何使用MVSC编译器生成XFG函数原型哈希 AI 安全人才 网络信息安全 企业安全 安全体系

    C++函数声明和定义

    即:声明是给编译器用的,定义是给连接器用的。这个说明显得很模糊,为什么非要弄个声明和定义在这搅和?那都是因为C++同意将程序拆成几段分别书写在不同文件中以及上面提到的编译器只从上朝下编译且对每个文件仅...

    你必须知道的495个C语言问题

    1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 1.29 为什么我的编译器不允许我定义大数组,如...

    迷你型C++编译器和函数编译手册

    很小很实用的一款C++编译器,有函数速查手册在里面!!好好的收藏!

    《你必须知道的495个C语言问题》

    1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 15 1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我的编译器不允许我定义大数...

    Keil C 编译器常见警告与错误信息的解决方法

    说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数 则要写成extern void Music3(void),即作外部宣告 3 Compling :C:\...

    java调用本地编译器编译文件

    获得代码,保存到本地,调用本地编译器编译文件,执行之后返回结果并删除文件。可以更改为接口,集成到web项目里,达到类似菜鸟工具java在线编程的效果,考虑并发的话需要使用多线程

    [原创]]Slickedit调用Keil编译器的实现

    用Slickedit调用Keil编译器的实现编译和生成目标文件

    C语言FAQ 常见问题列表

    o 4.10 如果我不使用表达式的值, 我应该用 ++i 或 i++ 来自增一个变量吗? o 4.11 为什么如下的代码 int a = 100, b = 100; long int c = a * b; 不能工作? o 4.12 我需要根据条件把一个复杂的表达式赋值给两个...

    原创解决mex-setup未找到支持的编译器或 SDK

    原创解决mex-setup未找到支持的编译器或 SDK,主要是安装编译器后,mex对环境变量,或文件路径不识别造成的。以上方法可轻松解决,不需要下载其他文件。

    计算机专业编译原理c0编译器实验代码及实验报告

    自定义函数可超前使用(调用在前,定义在后)。 根据上面给定的C0文法及其说明和下列定义的假想栈式指令系统,按递归下降分析法设计并实现该C0语言的编译器,生成栈式目标代码;编写栈式指令系统的解释执行程序,...

    08_29_C++ C++编译器对普通成员函数的内部处理

    08_29_C++ C++编译器对普通成员函数的内部处理08_29_C++ C++编译器对普通成员函数的内部处理08_29_C++ C++编译器对普通成员函数的内部处理08_29_C++ C++编译器对普通成员函数的内部处理08_29_C++ C++编译器对普通...

Global site tag (gtag.js) - Google Analytics