小编0x4*_*2D2的帖子

双指针的问题

当我尝试使用下面第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++ pointers segmentation-fault

3
推荐指数
1
解决办法
200
查看次数

public header类构造函数

我是构建用C++编写的可分发库的新手,我有点迷失了.我创建了一个.cpp文件,其中包含我希望库为用户提供的所有函数的包装器,我编写了2个.h文件,一个是公共文件,一个是私有文件.下面是我的头文件的虚拟示例:

public.h:

class myclass
{
public:
    public_function();
private:
}
Run Code Online (Sandbox Code Playgroud)

private.h:

class myclass
{
public:
    public_function();
private:
    anotherClass instanceofClass;
}
Run Code Online (Sandbox Code Playgroud)

注意,实现public_function()在代码中使用"instanceofClass".我已经能够使用私有类编译没有问题的代码,并使用公共头和编译库编译和链接库与外部程序.但是,当执行该代码时,我遇到了分段错误,我怀疑这与缺少"instanceofClass"的正确初始化有关.

我做对了吗?我是否被迫在实现中实例化"instanceofClass" public_function()以使其正确初始化,或者还有什么我应该做的呢?

非常感谢.

c++

3
推荐指数
1
解决办法
128
查看次数

为什么JNIOnLoad不运行?

我有一个带有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函数.我已经尝试卸载应用程序并重新安装它但它从未运行过.

c++ java java-native-interface android-ndk

3
推荐指数
1
解决办法
1640
查看次数

删除指针数组的正确方法

我有一个指针数组(我通过调用创建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)

这是否符合我的想法?

谢谢

c++ free

3
推荐指数
1
解决办法
4993
查看次数

在std :: common_type的实现中发现这种情况有什么意义?

以下是其中一个专业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是多余的,并且条件将始终解析为第一个操作数?如果是这样,返回的类型如何满足定义?

c++

3
推荐指数
1
解决办法
97
查看次数

std :: transform用于向量的向量

我在向量<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++ nested transform vector range

3
推荐指数
1
解决办法
1269
查看次数

C++ if/else if语句不起作用

我是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)

c++ if-statement pass-by-reference

3
推荐指数
1
解决办法
1738
查看次数

使用noexcept说明符,尾随返回类型语法失败?

此代码按预期工作:

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中得到修复)?或者这是否被标准明确禁止?

c++ c++11

3
推荐指数
1
解决办法
952
查看次数

使用迭代器de-reference的decltype编译错误

我在这里错过了什么?为什么我不能使用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++ templates decltype visual-c++ c++17

3
推荐指数
1
解决办法
129
查看次数

如何在C ++ 17中将std :: string转换为std :: vector &lt;std :: byte&gt;?

如何在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)

c++ byte

3
推荐指数
1
解决办法
827
查看次数