功能指针不起作用

时间:2013-07-26 12:07:21

标签: c++

此代码无效

任何想法

#include <QCoreApplication>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include "a.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    boost::asio::io_service io;
  std::cout << "Wait for five seconds\n";
     boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
   //  t.wait();
     A *vvv=new A();
     std::cout << "Hello, world!\n";
     t.async_wait(&print);
         std::cout << "Keep cool and wait!\n";
    return a.exec();
}
void  print(const boost::system::error_code& /*e*/)
{
  std::cout << "You are cool!\n";
}

错误:

  

D:\ qtsrc \ asiotry \ main.cpp:14:错误:C2065:'print':未声明   标识符

3 个答案:

答案 0 :(得分:3)

看一下这段代码:

 int *address = &i; //using i here!

 int i; //declaration

此代码有什么问题?您正在做类似的事情。

print之前声明main(),以便您可以<{1}} 使用

main()

请注意,在使用之前,您需要声明函数并不一定意味着声明必须高于//declaration void print(const boost::system::error_code& /*e*/); int main() { //use print here } //definition void print(const boost::system::error_code& /*e*/) { std::cout << "You are cool!\n"; } 。你也可以这样做:

main()

希望能帮助您理解声明和使用的概念。 - )

答案 1 :(得分:0)

这是因为当您在print调用中使用async_wait时,它尚未声明,因此它不知道print是什么。

有两种可能的解决方案:

  1. print函数的定义移至main以上。
  2. 在使用之前,请将其声明为原型。

答案 2 :(得分:0)

记住一件事。函数的声明应位于程序中引用(用法)之前。

在main之前添加: -

void print(const boost::system::error_code& /*e*/);

在main之前定义函数。