0

此代码不起作用

知道为什么

#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':未声明的标识符

4

3 回答 3

3

看看这段代码:

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

 int i; //declaration

这段代码有什么问题? 你正在做类似的事情。

print之前声明,main()以便您可以在以下位置使用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(). 你也可以这样做:

int main()
{
      //declaration
      void  print(const boost::system::error_code& /*e*/);

     //use print here AFTER the declaration!
}

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

于 2013-07-26T12:09:20.380 回答
0

这是因为你printasync_wait调用中使用的时候,它还没有被声明,所以它不知道是什么print

对此有两种可能的解决方案:

  1. print函数的定义移到上面main
  2. 在使用它之前,将其声明为原型。
于 2013-07-26T12:09:40.747 回答
0

记住一件事。函数的声明应该在程序中的引用(使用)之前。

在 main 之前添加:-

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

或者

在 main 之前定义函数。

于 2013-07-26T12:10:07.537 回答