Even after updating to boost 1.38 I still get this error. This is the
current error that I get. Any help with this is greatly appreciated.
g++ -I/local/boost-1.38.0/include/ -I/usr/include/mysql
-I/usr/include/Magick++ -I/local/mysql++/include/mysql++
-I/local/config++/include -I/local/librets/include -O0 -g3 -Wall -c
-fmessage-length=0 -MMD -MP -MF"src/retsCom.d" -MT"src/retsCom.d"
-o"src/retsCom.o" "../src/retsCom.cpp"
../src/retsCom.cpp: In function ‘int main()’:
../src/retsCom.cpp:38: error: ISO C++ forbids taking the address of a bound
member function to form a pointer to member function. Say
‘&DataParse::rets_init’
/local/boost-1.38.0/include/boost/mem_fn.hpp: In member function ‘const R&
boost::_mfi::dm::call(U&, const void*) const [with U = const
std::basic_string, R =
int ()(std::string), T = DataParse]’:
/local/boost-1.38.0/include/boost/mem_fn.hpp:352: instantiated from ‘const
R& boost::_mfi::dm::operator()(const U&) const [with U =
std::basic_string, R =
int ()(std::string), T = DataParse]’
/local/boost-1.38.0/include/boost/bind.hpp:232: instantiated from ‘void
boost::_bi::list1<A1>::operator()(boost::_bi::type<void>, F&, A&, int) [with
F = int (DataParse::*)(std::string), A = boost::_bi::list0, A1 =
boost::_bi::value >]’
/local/boost-1.38.0/include/boost/bind/bind_template.hpp:20: instantiated
from ‘typename boost::_bi::result_traits::type boost::_bi::bind_t::operator()() [with R = void, F = int (DataParse::*)(std::string), L =
boost::_bi::list1 > >]’
/local/boost-1.38.0/include/boost/thread/detail/thread.hpp:56:
instantiated from ‘void boost::detail::thread_data<F>::run() [with F =
boost::_bi::bind_t > > >]’
../src/retsCom.cpp:44: instantiated from here
/local/boost-1.38.0/include/boost/mem_fn.hpp:333: error: no matching
function for call to ‘get_pointer(const std::basic_string&)’
make: *** [src/retsCom.o] Error 1
Here is the current version of my code.
main (retsCom.cpp)
#include <iostream>
#include "common/Singleton.h"
#include "config/InitConfig.h"
#include "dbactions/DbConnect.h"
#include
#include "parsing/DataParse.h"
using namespace std;
void sayHello(int test){
cout << test << " HELLO " << endl;
}
int main() {
InitConfig mconfig;
if(mconfig.setConfig()){
DbConnect dbConn;
DataParse dparse;
// query data base for all instances active or not
mysqlpp::StoreQueryResult result = dbConn.db_query("select inst_uuid
from rcom_instances");
std::string testtest ="123";
for (size_t i = 0; i < result.num_rows(); ++i) {
// init instance variables
boost::thread thrd(&dparse.rets_init,testtest);
thrd.join();
}
}
return 0;
}
DataParse.cpp
#include "DataParse.h"
DataParse::DataParse(){
}
int DataParse::rets_init(std::string instanceUUID){
DbConnect dbConn;
// create query string
std::string sqlquery = "SELECT "
"rcom_instances.username as instUser, "
"rcom_instances.userpass as instPass, "
"rcom_instances.login_uri as instURI, "
"rcom_client.username as cliUser, "
"rcom_client.userpass as cliPass, "
"rcom_client.hostname as cliHost, "
"rcom_client.datasource as cliSource "
"FROM "
"rcom_instances "
"Inner Join rcom_client ON
rcom_instances.inst_uuid = rcom_client.inst_uuid "
"WHERE "
"rcom_instances.inst_uuid = '" +
instanceUUID + "'";
// Query db server for rets info
mysqlpp::StoreQueryResult result =
dbConn.db_query(sqlquery.c_str());
std::cout << result.num_fields() << std::endl;
iActions.setClientDatasource(dbConn.mysqlStringToString(result[0][0]));
std::cout << iActions.getClientDatasource() << std::endl;
parse_test();
return 0;
}
int DataParse::parse_test(){
std::cout << '\t' << '\t' << iActions.getClientDatasource() <<
std::endl;
return 0;
}
DataParse.h
#ifndef DATAPARSE_H_
#define DATAPARSE_H_
#include <string>
#include <iostream>
#include "../config/InstConfig.h"
#include "../dbactions/DbConnect.h"
class DataParse {
InstConfig iActions;
public:
DataParse();
int rets_init(std::string instanceUUID);
int parse_test();
};
#endif /* DATAPARSE_H_ */
On Mon, Mar 16, 2009 at 8:52 AM, Steven Watanabe wrote:
AMDG
r ottmanj wrote:
I am working on an application that takes use of boost::thread. During the
initial method of my application I need to pass one argument to the
method.
As per the api documentation for boost::thread I am using the following:
boost::thread dataThread(dparse.dataMain,instUUID);
dataThread.join();
However, when I attempt to use this, I get the following exception from my
compiler. Is there something that I am missing? I do not see how my thread
constructor is any different from the constructor in the api
documentation.
Any help with this is greatly appreciated.
error: no matching function for call to ‘boost::thread::thread(<unresolved
overloaded function type>, std::string&)’
/usr/include/boost/thread/thread.hpp:38: note: candidates are:
boost::thread::thread(const boost::function0boost::function_base >&)
/usr/include/boost/thread/thread.hpp:37: note:
boost::thread::thread()
/usr/include/boost/thread/thread.hpp:35: note:
boost::thread::thread(const boost::thread&)
It looks like you have an older version of Boost that
doesn't support extra arguments to the constructor.
You'll need to use Boost.Bind.
In Christ,
Steven Watanabe
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users