【问题标题】:How to include the OTL header in other files besides main.cpp?如何在除 main.cpp 之外的其他文件中包含 OTL 标头?
【发布时间】: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 头吗?
如果我应该,那我该怎么做?

【问题讨论】:

    标签: c++ 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()
    {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      相关资源
      最近更新 更多