错误①
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start‘:
.text+0x20): undefined reference to `main‘
collect2: error: ld returned 1 exit status
解决:asio.hpp ---> asio.cpp(后缀名问题) //在标准库支持的情况下尽可能使用标准库的功能,而不是boost的功能
错误②
test.cpp: In function ‘int main()’:
test.cpp:14:11: error: cannot call member function ‘void A::print()’ without object
A::print();
解决:这是在没有定义对象的情况下调用了类的成员函数造成的结果。可以在此函数上加static变量,参考signalton。
错误③:
class A {
private:
boost::asio::io_context io_;
A(boost::asio::io_context& io_context) : io_(io_context) { std::cout << " ok \n" ;}
};
int main(){
boost::asio::io_context io_context;
A(io);
io.run();
return 0;
}
test.cpp: In constructor ‘A::A(boost::asio::io_context&)’:
test.cpp:7:57: error: use of deleted function ‘boost::asio::io_context::io_context(const boost::asio::io_context&)’
A(boost::asio::io_context& io_context) : io_(io_context) { std::cout << " ok \n" ;}
解决:这是一个连续引用的错误问题,应该把A的成员变量io_,定义为boost::asio::io_context&。
这是因为在构造函数结束后io_context这个引用变量就失效了。
例子:
1 #include<iostream> 2 class A { 3 private: 4 int my_; 5 public: 6 A(int& a):my_(a){ 7 std::cout << "address a :" << &a << std::endl; //a是引用 8 std::cout << "address my_:" << &my_ << std::endl; //my_是用引用初始化的值。 9 } 10 }; 11 int main(){ 12 int m = 10; 13 std::cout<< "address m :" << &m << std::endl; 14 A o(m); 15 return 0; 16 }
原文:https://www.cnblogs.com/Ccluck-tian/p/11842053.html