gpt4 book ai didi

c++ - 错误 : reference to ‘sword’ is ambiguous in armadillo and oracle occi compatibility issue

转载 作者:行者123 更新时间:2023-11-28 06:18:23 25 4
gpt4 key购买 nike

在 armadillo c++ 中我使用一些 api 并使用 oracle occi 尝试将值插入到 oracle 表中,但是我得到了这样的错误:-

/home/oracle/Desktop/project/armadillo-4.450.4/include/armadillo_bits/typedef_elem.hpp:79: error:                 typedef arma::s32 arma::sword
/usr/include/oracle/11.1/client/ociap.h:10830: error: reference to ‘sword’ is ambiguous
/usr/include/oracle/11.1/client/oratypes.h:227: error: candidates are: typedef int sword

我的示例代码是:- main.cpp

#include <stdio.h>
#include <iostream>
#include "db_manager.h"
#include <armadillo>
using namespace arma;
int glbsize;//this variable is global it is declared in global_variables.h
mat glbmtrx;//this variable is global it is declared in global_variables.h
void add()
{
double deter;
int ppp=0;
mat z;
mat x = randu<mat>(4,4);
mat y = randu<mat>(4,4);
z=x+y;
mystruct strct;
strct.mymatrix=z;//variable from comm.structure
glbmtrx=strct.mymatrix;//varible from glb.variables
deter= det(z);
db_manager db;
db.load_determinant(deter);
}
int main()
{
add();
return 0;
}

数据库管理器.cpp

#include "db_manager.h"
#include <sstream>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace oracle::occi;
using namespace std;
Environment *env;
Connection *con;
void db_manager::load_determinant(double det)
{
mystruct strct;
strct.deter_size=det;//var from comm.structure
string user = "user";
string passwd = "p@$$word";
string db = "localhost:1521/sisdba";
env = Environment::createEnvironment((Environment::Mode)(Environment::OBJECT|Environment::THREADED_MUTEXED));
con = env->createConnection(user, passwd, db);
Statement *stmt = NULL;
ResultSet *rs = NULL;
string concat1="";
concat1=static_cast<ostringstream*>(&(ostringstream()<<det))->str();
string sql="insert into determinanit_table values('"+concat1+"')";
stmt = con->createStatement(sql);
stmt->executeUpdate(sql);
env->terminateConnection (con);
Environment::terminateEnvironment (env);
}

数据库管理器.h

#include "includes/global_variables.h"
#include <occi.h>
class db_manager
{
public:
db_manager(void);
~db_manager(void);
void load_determinant(double det);
};

通用结构体.h

#include <armadillo>
using namespace arma;
using namespace std;

struct mystruct
{
mat mymatrix;
double deter_size;
};

全局变量.h

#include "../includes/common_structures.h"
using namespace arma;
extern int glbsize;
extern mat glbmtrx;

生成文件:

excute:main.o db_manager.o
g++ -o excute main.o db_manager.o \
-I/home/oracle/Desktop/sum_result/armadillo-4.450.4/include -DARMA_USE_BLAS -DARMA_USE_LAPACK -DARMA_DONT_USE_WRAPPER -lblas -llapack \
-I/usr/include/oracle/11.1/client \
-L$(ORACLE_HOME)/lib -lclntsh -locci
%.o: %.cpp
g++ -c -o $@ $< -ggdb \
-I/home/oracle/Desktop/sum_result/armadillo-4.450.4/include -DARMA_USE_BLAS -DARMA_USE_LAPACK -DARMA_DONT_USE_WRAPPER -lblas -llapack \
-I/usr/include/oracle/11.1/client \
-L$(ORACLE_HOME)/lib -lclntsh -locci
clean:
rm *.o excute

最佳答案

对您的代码的一些评论:

  • 注意全局变量(main.cpp 中的mat glbmtrx;)。如果 armadillo 库也使用全局变量来工作,则您无法保证所有全局变量的分配顺序。如果您的变量 glbmtrxmat 的构造函数使用的全局变量之前分配,您将遇到问题!如果你真的需要它,更喜欢使用 Singleton Pattern .
  • common_struct.h 中:永远不要在头文件中调用 using!您可以在 namespace 之间创建冲突。想象一下,我想合并您的应用程序和我的应用程序。如果我在我的应用程序中使用一个名为 vector 的类,那么在不发生冲突的情况下调用它会很复杂,因为 vector 引用 std::vector 由于您的文件。
  • 实际上,您的问题可能来自 namespace 冲突。我建议您永远不要调用 using namespace std 并始终将其添加到您调用的类/函数中。当我一起使用多个库时,我从不调用 using namespace xxx,我总是使用全局名称。

关于c++ - 错误 : reference to ‘sword’ is ambiguous in armadillo and oracle occi compatibility issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29793146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com