当我尝试使用下面第15行中的指针变量*temp创建一个新的Node对象时,我遇到了分段错误.我仍然是c ++的新手,以及双指针的工作方式,特别是与&结合使用时.谢谢你的帮助.
void bst::insert(int n) {
Node **temp;
Node *r, *parent;
// Tree is empty
if (root == NULL) {
root = new Node;
root->parent = NULL;
root->value = n;
root->left = NULL;
root->right = NULL;
root->isBlack = true;
} else {
r = root;
// Create a node with the given value, n
(*temp) = new Node;
(*temp)->value = n;
(*temp)->left = NULL;
(*temp)->right = NULL;
(*temp)->isBlack = false;
Run Code Online (Sandbox Code Playgroud) 我是构建用C++编写的可分发库的新手,我有点迷失了.我创建了一个.cpp文件,其中包含我希望库为用户提供的所有函数的包装器,我编写了2个.h文件,一个是公共文件,一个是私有文件.下面是我的头文件的虚拟示例:
class myclass
{
public:
public_function();
private:
}
Run Code Online (Sandbox Code Playgroud)
class myclass
{
public:
public_function();
private:
anotherClass instanceofClass;
}
Run Code Online (Sandbox Code Playgroud)
注意,实现public_function()在代码中使用"instanceofClass".我已经能够使用私有类编译没有问题的代码,并使用公共头和编译库编译和链接库与外部程序.但是,当执行该代码时,我遇到了分段错误,我怀疑这与缺少"instanceofClass"的正确初始化有关.
我做对了吗?我是否被迫在实现中实例化"instanceofClass" public_function()以使其正确初始化,或者还有什么我应该做的呢?
非常感谢.
我有一个带有Java基本活动,Java JNI接口类和本机代码的Android项目.我有正确的
System.loadlibrary(_libraryname_);
Run Code Online (Sandbox Code Playgroud)
在我的Java接口类和logcat输出中:
11-29 15:11:20.737: D/dalvikvm(8940): No JNI_OnLoad found in /data/data/com.example.testjni/lib/libTestJNI.so 0x406ef030, skipping init
Run Code Online (Sandbox Code Playgroud)
在我的cpp文件头中:
extern "C" {
JNIEXPORT jint JNICALL JNIOnLoad(JavaVM *, void *);
}
Run Code Online (Sandbox Code Playgroud)
在cpp文件中:
JNIEXPORT jint JNICALL JNIOnLoad(JavaVM *vm, void *reserved)
{
LOGI("JNIOnLoad");
jvm = vm;
return JNI_VERSION_1_6; /* the required JNI version */
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有调用OnLoad函数.我已经尝试卸载应用程序并重新安装它但它从未运行过.
我有一个指针数组(我通过调用创建new ptr*[size]).所有这些指针都指向一个也放在堆上的对象.
删除数组和所有新的ptr的正确方法是什么?
这就是我现在所做的:
for (int i = 0; i < size; i++) delete array[i];
delete[] array; // Not sure since this double deletes array[0]
Run Code Online (Sandbox Code Playgroud)
这是否符合我的想法?
谢谢
以下是其中一个专业std::common_type.
template <class T, class U>
struct common_type<T, U> {
typedef decltype(true ? declval<T>() : declval<U>()) type;
};
Run Code Online (Sandbox Code Playgroud)
我的观点是条件陈述是不必要的.如果它正在检查true,那么表达式总是会解决declval<T>()吗?如果是这样,返回的typedef如何证明定义...
"确定所有类型中的公共类型
T...,即所有类型都T...可以隐式转换为."
有人可以解释条件陈述吗?检查是否true是多余的,并且条件将始终解析为第一个操作数?如果是这样,返回的类型如何满足定义?
我在向量<vector <double >>中有数值数据,需要为它们添加标量值,如下所示:
vector <vector<double> > data ( M, vector<double>(N) );
vector <double>scalars(N);
data[0][0] += scalars[0];
data[0][1] += scalars[1];
...
data[0][N-1] += scalars[N-1];
data[1][0] += scalars[0];
data[1][1] += scalars[1];
...
data[1][N-1] += scalars[N-1];
...
data[M-1][N-1] += scalars[N-1];
Run Code Online (Sandbox Code Playgroud)
当然,这可以通过两个for循环来实现.我想知道它是否可以简单地使用transform,bind和plus来完成?我试图尽可能使用仿函数(尽管仍然习惯使用旧的C风格代码).
内部循环需要对数据中的向量0执行此操作:
transform ( data[0].begin(), data[0].end(),
scalars[0].begin(),
data[0].begin(),
plus<double>() )
Run Code Online (Sandbox Code Playgroud)
是否有可能将此行中的数据[0]替换为另一个计数器(与数据[0] ...数据[N-1]的变换相关)?这可能是一个标准问题,但我找不到一个好的参考.
我是C++的新手,我必须制作一个C++程序,使用传递引用对3个数字(最小 - 最大)进行排序.一切正常,直到我的函数中的if语句.我试图做很多调试,似乎每当我使用"<"时语句都不会执行.如果我这样做(n1 > n2),语句就会执行.如果有人能提供帮助,那就太棒了.这是我的代码:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
int sortNum(double &n1, double &n2, double &n3);
int main(int argc, char *argv[]) {
double num1, num2, num3;
printf("Welcome to Taylor's Sorting Program \n");
printf("Enter 3 numbers and the program will sort them \n");
printf("Number 1: \n");
scanf("%d", &num1);
printf("Number 2: \n");
scanf("%d", &num2);
printf("Number 3: \n");
scanf("%d", &num3);
sortNum(num1, num2, num3);
printf("Sorted Values \n");
printf("Number 1: %d ", num1);
printf("\t Number 2: %d ", …Run Code Online (Sandbox Code Playgroud) 此代码按预期工作:
void f() noexcept {}
Run Code Online (Sandbox Code Playgroud)
但是以下失败了GCC 4.7.2中的错误:
auto f() -> void noexcept {}
// error: expected initializer before ‘noexcept’
Run Code Online (Sandbox Code Playgroud)
我读过的文章没有说过任何关于无法noexcept在训练返回类型中指定的内容.这是一个错误(并且已经在最新版本的GCC中得到修复)?或者这是否被标准明确禁止?
我在这里错过了什么?为什么我不能使用decltype来定义迭代器的value_type?当我使用decltype而不是iterator_traits时,下面的代码会产生难以理解的编译时错误,但前提是我还使用value_type来声明向量.
Visual Studio 2017,C++ 17 rev.15.6预览
#include <vector>
template<class Ptr >
void foo(Ptr beg) {
*beg = 1; // Cool, babies.
// using value_type = decltype(*beg); // COMPILER ERROR when buf declared below
using value_type = typename std::iterator_traits<Ptr>::value_type;
std::vector<value_type> buf(1); // Remove this and decltype compiles.
}
int main() {
std::vector<int> bar(1);
foo(std::begin(bar));
*(std::begin(bar)) = 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
按要求...
error C2528: 'const_pointer': pointer to reference is illegal
Run Code Online (Sandbox Code Playgroud) 如何在C ++ 17中将a转换std::string为a std::vector<std::byte>?
编辑:由于要尽可能多地检索数据,所以我正在填充异步缓冲区。所以,我std::vector<std::byte>在缓冲区上使用,我想转换字符串以填充它。
std::string gpsValue;
gpsValue = "time[.........";
std::vector<std::byte> gpsValueArray(gpsValue.size() + 1);
std::copy(gpsValue.begin(), gpsValue.end(), gpsValueArray.begin());
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
error: cannot convert ‘char’ to ‘std::byte’ in assignment
*__result = *__first;
~~~~~~~~~~^~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)