why is include not working? - beginner question

J

Jason

I am a beginner with c++. I'm running g++ from the command line in
Ubuntu. I found everything working fine except that when I try to
include a *.h file, I can't get it to work.

I downloaded SQLAPI and am trying to include the SQLAPI.h file at the
beginning of a file called "my_file.cpp". The path to the SQLAPI.h
file is "foo/SQLAP/include" and the path to "my_file.cpp" is "foo/
my_file.cpp". I attempted to include the file like this (what did I do
wrong?):

#include <stdio.h> // for printf
-I<SQLAPI/include/SQLAPI.h> // main SQLAPI++ header

int main(int argc, char* argv[])
{
SAConnection con; // create connection object

try
{
// connect to database
// in this example it is Oracle,
// but can also be Sybase, Informix, DB2
// SQLServer, InterBase, SQLBase and ODBC
con.Connect(...etc...
...etc...
Thank you!
 
J

Joshua Maurice

I am a beginner with c++. I'm running g++ from the command line in
Ubuntu. I found everything working fine except that when I try to
include a *.h file, I can't get it to work.

I downloaded SQLAPI and am trying to include the SQLAPI.h file at the
beginning of a file called "my_file.cpp". The path to the SQLAPI.h
file is "foo/SQLAP/include" and the path to "my_file.cpp" is "foo/
my_file.cpp". I attempted to include the file like this (what did I do
wrong?):
-I<SQLAPI/include/SQLAPI.h> // main SQLAPI++ header

Is that literally in your source file?

Try
#include "SQLAPI.h"
in your source file, and try putting
-ISQLAPI/include
on the command line. (Probably something like
-I${SQLAPI}/include
where SQLAPI is an environmental variable which points to "the SQL
folder".)
 
V

Victor Bazarov

Jason said:
I am a beginner with c++. I'm running g++ from the command line in
Ubuntu. I found everything working fine except that when I try to
include a *.h file, I can't get it to work.

I downloaded SQLAPI and am trying to include the SQLAPI.h file at the
beginning of a file called "my_file.cpp". The path to the SQLAPI.h
file is "foo/SQLAP/include" and the path to "my_file.cpp" is "foo/
my_file.cpp". I attempted to include the file like this (what did I do
wrong?):

#include <stdio.h> // for printf
-I<SQLAPI/include/SQLAPI.h> // main SQLAPI++ header

Is that in your source code? Remove it. That's likely supposed to be
in your command line, not to mention that you didn't actually include
the needed header:

#include <SQLAPI.h>

What beginner's book are you reading that doesn't explain such simple
concepts?
int main(int argc, char* argv[])
{
SAConnection con; // create connection object

try
{
// connect to database
// in this example it is Oracle,
// but can also be Sybase, Informix, DB2
// SQLServer, InterBase, SQLBase and ODBC
con.Connect(...etc...
...etc...
Thank you!

V
 
J

Jason

What beginner's book are you reading that doesn't explain such simple
concepts?

Thank you. I know this seems just too simple. Problem is, I've been
searching for some time and still have not found documentation on
doing something like -I${environment_variable}/include in the command
line. Would you mind pointing me to this documentation? And how does
this statement fit? I tried putting the #include statement in the
source file like you said (#include "SQLAPI.h" ) and using the -I
option in the command line:

jrl:~$ g++ my_source_file.cpp -I${SQLAPI}/include

also tried:

jrl:~$ g++ -I${SQLAPI}/include my_source_file.cpp

Still, I get:

my_source_file.cpp:2:44: error: SQLAPI.h: No such file or directory

I wish this did not seem like such a lame question, but I just can't
find the answer - not sure where to look in beginner books online.

Thank you!
 
J

James Kanze

Thank you. I know this seems just too simple. Problem is, I've
been searching for some time and still have not found
documentation on doing something like
-I${environment_variable}/include in the command line.

Have you read the documentation of your compiler? How to invoke
the compiler depends on the implemenation: using -I or /I seems
to be an almost universal choice for specifying include paths
(i.e. telling the compiler where to look for included files).
Some compilers allow the option and the path to be separated by
a space, others not. (In practice, almost all of the compilers
which use /I also understand -I, and all those which allow the
space accept the option without it, so it's common here to
simply say -Ipath, which works with pretty much all compilers,
even if it isn't the "preferred" form for some.)

I will warn you, however, that most compiler documentation isn't
for beginners. And that it's a point that most beginners' books
do seem to ignore. (On the other hand, what beginners' book
could have given you the idea that -Iwhatever was legal in the
source code?)
Would you mind pointing me to this documentation? And how does
this statement fit? I tried putting the #include statement in
the source file like you said (#include "SQLAPI.h" ) and using
the -I option in the command line:
jrl:~$ g++ my_source_file.cpp -I${SQLAPI}/include
also tried:
jrl:~$ g++ -I${SQLAPI}/include my_source_file.cpp
Still, I get:
my_source_file.cpp:2:44: error: SQLAPI.h: No such file or directory

How is $SQLAPI defined in your shell?

For starters, what you have to do (with g++, but this also works
with most other compilers) is -Ipath, where path is the
specification of where the compiler should look for the files,
in this case, the path where your SQLAPI product installed the
header files. (Probably something like /opt/SQL/include or
/usr/local/include, depending on the system.) But it's a pain
to have to type this in every time, and to keep in mind where
all of the different products are installed on different
systems, so it's usual to set up an environment variable for
each product in your login file, pointing to its root, and use
this. Read the documentation of your shell for this.
I wish this did not seem like such a lame question, but I just
can't find the answer - not sure where to look in beginner
books online.

The problem is that you're dealing with several different
layers: the shell which interprets your command line, your
compiler, and the language. You need to know all three.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top