List:MySQL++« Previous MessageNext Message »
From:everweb Date:June 21 2007 10:31pm
Subject:Re: problem with SSQLS in header files...
View as plain text  

Joe Hudson-4 wrote:
> 
> I'd like to define a class with fetches and processes data from a DB.
> That class has methods which take and return vectors of rows of the DB,
> represented by SSQLS structures.
> The header file for this class I need in other source files so I can use
> it
> there. Fine.
> Trouble is, when is define a struct using
> 
> sql_create_# in the header file, I get a link error complaining about
> multiple defintions of symbols <struct name>::names
> and <struct name>::_table.
> 
> I can't have the sql_create_# statement in the cpp file of the class (and
> have a 'struct <struct name>' forward  declaration in the header)
> because then I can't dereference pointers or use iterators to that struct
> in
> other cpp files, which is what I want to do.
> 
> So, what's the solution? Has anyone come across this problem?
> 
> 
Your header file is fine. In my opinion you're doing nothing wrong - but
mysqlpp has a little hoop for you to jump through !
The mysqlpp macro defines two static variables for each struct; 'names' and
'_table' 
When you include the header file, you are including these static definitions
- if you include the header file in more than one cpp file, you get the
"multiple definitions" error from the linker because it finds one definition
of the static variable for each #include. There is a flag in mysqlpp which
allows you to include the header file more than once:
     #define MYSQLPP_SSQLS_NO_STATICS

From what I can see of your code, you would put the following into
dbaccess.h:
    #include <mysql++.h>    
    #define MYSQLPP_SSQLS_NO_STATICS
    #include "trade_row.h"

Note also that the static '_table' is what you would use to change the name
of the database table accessed by the mysqlpp code. For example, if you want
to change the table name to "Trade" but leave the "trade_row" class
untouched, you can add this after the includes in your dbaccess.cpp:
    const char *trade_row::_table = "Trade";


   
-- 
View this message in context:
http://www.nabble.com/problem-with-SSQLS-in-header-files...-tf3598356.html#a11242976
Sent from the MySQL - C++ mailing list archive at Nabble.com.

Thread
problem with SSQLS in header files...Joe Hudson18 Apr
  • RE: problem with SSQLS in header files...Matt Dargavel18 Apr
    • Re: problem with SSQLS in header files...Warren Young18 Apr
      • Re: problem with SSQLS in header files...Joe Hudson18 Apr
  • Re: problem with SSQLS in header files...everweb21 Jun