在工程中包含两个cpp文件(只有一个有main),那这段程序是怎样运行的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在工程中包含两个cpp文件(只有一个有main),那这段程序是怎样运行的?相关的知识,希望对你有一定的参考价值。
还有,为什么规定工程中能有两个cpp,如果是相互引用的话用**.h 不就行了吗,两个cpp就几个有什么意义,,,
1、首先写一个简单的cpp程序,这里用的vim。
2、写好之后,保存退出;vim输入[:wq],回车,保存退出。
3、然后,使用命令[ls],可以看到自己刚才写的cpp文件。
4、如果之前在Linux下写过C程序,可以知道编译C程序用的命令是[gcc hello.c -o hello]。
5、然后再用[ls]命令,查看编译出来的可执行文件。
6、最后使用命令[./hello],运行程序就完成了。
参考技术A 相互引用的只能是头文件,也就是你所说的.h,一个工程中只能有一个main函数,可以有多个cpp,可以为自己写的每个类写一个单独的cpp文件,其实也是可以直接写在main函数里的,但是分开成多个cpp只要是为了程序的可读性,能够让其他人也能很快的知道你写的代码是要干嘛的追问那写了其它的cpp,引用其中的函数时还加不加声明#include
本回答被提问者和网友采纳 参考技术B 我猜你现在学的是C++,首先必须有一个主函数main,cpp指的是文件扩展名,另外文件有.h和.cpp是类的定义和实现,在cpp文件必须加上.h头文件,而不是.cpp. 参考技术C 你创建新文件时没有把文件包含到编译目录中。项目属性中设置一下,把它包含进去就行了。如何在除 main.cpp 之外的其他文件中包含 OTL 标头?
【中文标题】如何在除 main.cpp 之外的其他文件中包含 OTL 标头?【英文标题】:How to include the OTL header in other files besides main.cpp? 【发布时间】:2016-09-03 03:39:57 【问题描述】:我在我的项目中使用 OTL。 以下代码按预期工作:
#include <iostream>
using namespace std;
#include <stdio.h>
#define OTL_ODBC // CompileOTL 4.0/ODBC
// Thefollowing #define is required with MyODBC 5.1 and higher
#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE
#define OTL_UNICODE // CompileOTL with Unicode
#include "../OTLtest/otlv4.h"// include the OTL 4.0 header file
otl_connect db; // connect object
void insert()
// insert rowsinto table
otl_stream o(1, //buffer size should be == 1 always on INSERT.
"insert into test_tab values(:f1<int>,:f2<char[5]>)",
// SQLstatement, char[5] means 5 2-byte
// Unicodecharatcters including a null
// terminator
db // connectobject
);
unsigned short tmp[32]; // Nullterminated Unicode character array.
for(int i = 1; i <= 100; ++i)
o << i;
tmp[0] = 1111; //Unicode character (decimal code of 1111)
tmp[1] = 2222; //Unicode character (decimal code of 2222)
tmp[2] = 3333; //Unicode chracater (decimal code of 3333)
tmp[3] = 4444; //Unicode chracater (decimal code of 4444)
tmp[4] = 0; //Unicode null terminator
o << (unsigned char*)tmp;
// overloadedoperator<<(const unsigned char*) in the case of Unicode
// OTL acceptsa pointer to a Unicode character array.
//operator<<(const unsigned short*) wasn't overloaded
// in order toavoid ambiguity in C++ type casting.
void select()
otl_stream i(50, //buffer size
" select* from test_tab "
"where f1>= :f11<int> "
" and f1 <= :f12<int>*2 ",
// SELECTstatement
db // connectobject
);
// create selectstream
int f1;
unsigned short f2[32];
i << 8 << 8; // assigning :f11 = 8, f12 = 8
// SELECTautomatically executes when all input variables are
// assigned. Firstportion of output rows is fetched to the buffer
while(!i.eof())
// while not end-of-data
i >> f1;
i >> (unsigned char*)f2;
// overloaded operator>>(unsignedchar*) in the case of Unicode
// OTL acceptsa pointer to a Unicode chracter array.
//operator>>(unsigned short*) wasn't overloaded
// in order toavoid ambiguity in C++ type casting.
cout << "f1=" << f1 << ", f2=";
for(int j = 0; f2[j] != 0; ++j)
cout << "" << f2[j];
cout << endl;
i << 4 << 4; // assigning :f11 = 4, :f12 = 4
// SELECTautomatically executes when all input variables are
// assigned. Firstportion of output rows is fetched to the buffer
while(!i.eof())
// while not end-of-data
i >> f1 >> (unsigned char*)f2;
cout << "f1=" << f1 << ", f2=";
for(int j = 0; f2[j] != 0; ++j)
cout << "" << f2[j];
cout << endl;
int main()
otl_connect::otl_initialize(); // initialize the database API environment
try
db.rlogon("root/123456@rhctp");
otl_cursor::direct_exec(
db,
"drop table test_tab",
otl_exception::disabled // disable OTL exceptions
); // droptable
otl_cursor::direct_exec(
db,
"create table test_tab(f1 int, f2 varchar(11))"
); // create table
insert(); //insert records into table
select(); //select records from table
catch(otl_exception&p)
// intercept OTL exceptions
cerr << p.msg << endl; // print out error message
cerr << p.stm_text << endl; // print out SQL that caused the error
cerr << p.var_info << endl; // print out the variable that caused the error
db.logoff(); //disconnect from the database
getchar();
return 0;
但是当我在我的项目中添加另一个类时,比如类 Test,其中包含 #include "../OTLtest/otlv4.h"
。 Visual Studio 2015 不会生成项目。
//TestOTL.h
#pragma once
class TestOTL
public:
TestOTL();
~TestOTL();
;
//TestOTL.cpp
#include "TestOTL.h"
#include "../OTLtest/otlv4.h"// include the OTL 4.0 header file
TestOTL::TestOTL()
TestOTL::~TestOTL()
如果我从TestOTL.cpp
文件中删除#include "../OTLtest/otlv4.h"
,则项目运行良好。
问题
我应该在 main.cpp 之外的文件中包含 OTL 头吗? 如果我应该,那我该怎么做?
【问题讨论】:
【参考方案1】:看来下面的代码可以工作
#include "TestOTL.h"
#define OTL_ANSI_CPP_11_NULLPTR_SUPPORT
#define OTL_ODBC // CompileOTL 4.0/ODBC
#include "../OTLtest/otlv4.h"// include the OTL 4.0 header file
extern otl_connect db;
TestOTL::TestOTL()
otl_stream o(1, //buffer size should be == 1 always on INSERT.
"insert into test_tab values(:f1<int>,:f2<char[5]>)",
// SQLstatement, char[5] means 5 2-byte
// Unicodecharatcters including a null
// terminator
db // connectobject
);
TestOTL::~TestOTL()
【讨论】:
以上是关于在工程中包含两个cpp文件(只有一个有main),那这段程序是怎样运行的?的主要内容,如果未能解决你的问题,请参考以下文章
链接器如何知道两个源文件中哪个是主文件,另一个包含函数定义?