8 messages in com.mysql.lists.plusplusRe: Compile Error/Code Issue
FromSent OnAttachments
gary clark14 Nov 2006 15:00 
gary clark15 Nov 2006 15:14 
Freyja15 Nov 2006 23:29 
Joel Fielder16 Nov 2006 00:46 
Warren Young16 Nov 2006 03:06 
gary clark16 Nov 2006 07:20 
Freyja16 Nov 2006 17:18 
Joel Fielder17 Nov 2006 00:38 
Subject:Re: Compile Error/Code Issue
From:Freyja (fre@landofshadow.net)
Date:11/16/2006 05:18:07 PM
List:com.mysql.lists.plusplus

Thanks a million for the help, I was able to work through most of the issues but I think my fundamental modifications of the code that I did last night were what was giving me the most problems. So, in short, I backed up the version that I finally got to compile (which still doesn't compile into the program itself which is why I think it might be a bigger set of what I did) and then pulled a fresh copy of the file and did some very basic modifications and I think I'm quite a bit further along but I appear to be running into a big of an issue with it at this point and was wondering if I could get any pointers as to if I have something with mysqlpp set up wrong? I think I'm really really close, but a touch stuck =\.

### The Errors ###

lyra:src/SQL# make g++ -Wall -Wno-deprecated -O -g -I/usr/include/mysql++ -I/usr/include/my sql -c DatabaseControl.cpp DatabaseControl.h:29: error: ISO C++ forbids declaration of 'Connection' with no type DatabaseControl.h:29: error: expected ';' before '*' token DatabaseControl.cpp: In constructor 'DatabaseControl::DatabaseControl()': DatabaseControl.cpp:39: error: 'm_conDB' was not declared in this scope DatabaseControl.cpp:39: error: expected type-specifier before 'Connection' DatabaseControl.cpp:39: error: expected `;' before 'Connection' DatabaseControl.cpp: In member function 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Command*, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Command*> > > DatabaseControl::getCommands()': DatabaseControl.cpp:54: error: 'm_conDB' was not declared in this scope

### The Snippets of Code ###

I have included mysql++.h and using namespace mysqlpp

DatabaseControl *DatabaseControl::s_DBCinstance((DatabaseControl*) 0);

/** * Private contructor for the class. Creates a new Connection object * and connects to the database. */ DatabaseControl::DatabaseControl() { try { m_conDB = new Connection(); m_conDB->connect(DBNAME, DBHOST, DBUSER, DBPASS); } catch(const BadQuery& er) { cerr << "Error occured: " << er.what() << endl; } }

###### 2nd error related to below ######

map<string, Command*> DatabaseControl::getCommands() { map<string, Command*> theMap;

try { Query query = m_conDB->query(); query << "SELECT * FROM tbl_commands";

Result res = query.store(); Row row;

Result::iterator it; for(it = res.begin(); it != res.end(); ++it) { row = *it; Command *newCmd = new Command( row["Name"].get_string(), row["Code"].get_string(), (int)row["MinPosition"], (int)row["Level"], (int)row["Logged"], (int)row["Enabled"] ); theMap[newCmd->getName()] = newCmd; } } catch(const BadQuery& er) { cerr << "Error querying for Command:" << er.what() << endl; }

return theMap; }

### The Header File Snippets ###

I have included mysql++.h and using namespace mysqlpp here as well.

class Connection;

class DatabaseControl : public IDataPersist { private: Connection *m_conDB; static DatabaseControl *s_DBCinstance; DatabaseControl();

public: virtual ~DatabaseControl(); static DatabaseControl* Instance(); map<string, Command* > getCommands(); **SNIPPED**

I'm sure these are just c++ errors as opposed to anything mysql++ related - if so you should follow this up on a c++ list somewhere.

Error 1, exactly what it says on the tin, constructors can't return a value of any type so just remove the "return -1;". Personally, I'd let whatever instanciates DatabaseControl handle the exception (or at least re-throw it), but otherwise making that change will correct the error.

I think error 2 is because "con" is a pointer, probably you need to use con->query(). I think error 3 you're missing the header file for mysqlpp::Connection.

Also, because you're shadowing the "con" member variable in the constructor it is probably not allocated anywhere. Result: app will probably crash when you call getCommands or DatabaseControl goes out of scope :) Enjoy more, and turn on -Wshadow to have the compiler let you know about it. Turn on -Wall for that matter :)