小编Ash*_*ban的帖子

使用malloc定义2D数组并对其进行修改

如何使用malloc定义2D数组?(比如10X20).

第二,我可以增加行数或列数而不创建新增加的数组并将所有数据复制到它吗?

例如,如何分配内存,使阵列为10x30或15x20?

谢谢!

c

8
推荐指数
2
解决办法
1万
查看次数

如何将用户定义的类型转换为基本类型?

假设我们有一个叫做Complex复数的类.我想将此对象转换为double对象.

相反,我可以通过在Complex中实现复制ctor来实现:
Complex(const double &d);

但是,我无法实现i复制ctor in double将收到一个Complex.

我该怎么做呢?我知道有一种运算符重载的方法,但我找不到如何.
最终我想要这行将编译:
Complex c;
(double)c;

谢谢!!

c++

7
推荐指数
1
解决办法
5377
查看次数

可交换的oprator重载+ 2个不同的对象

我有2个表示矩阵的类:
1.RegularMatrix - O(n ^ 2)表示
2. SparseMatrix - 表示为链表(没有零)的矩阵.

让我说我有:

RegularMatrix a;
SparseMatrix b;
Run Code Online (Sandbox Code Playgroud)

我希望能够做到:

a+b;
Run Code Online (Sandbox Code Playgroud)

并且:

b+a;
Run Code Online (Sandbox Code Playgroud)

所以我正在重载+运算符.我的问题是,因为我希望加法是可交换的(a + b = b + a),我是否需要实现2个过载,每种情况一个?

RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
Run Code Online (Sandbox Code Playgroud)

或者是否有编译器自己决定的一般形式?

谢谢

c++ operator-overloading operator-keyword commutativity

6
推荐指数
1
解决办法
3329
查看次数

forward声明生成不兼容的类型错误

我一直在阅读有关前瞻性声明的一些内容,包括在这个论坛中.他们都说它使我们免于包含头文件,但以下代码会生成错误:

#ifndef CLASSA_H_
#define CLASSA_H_

class B;

class A {

public:
    A();
    ~A();
    int getCount();
private:
    static int _count;
    int _num;
    B _b1;   //ERROR

};
Run Code Online (Sandbox Code Playgroud)

编译说: A.h:23: error: field ‘_b1’ has incomplete type

我注意到如果我制作_b1类型B*问题就解决了.

那么前向声明只适用于指针类型吗?
如果我想A持有B对象我必须#inlcude "B.h"

谢谢!

c++

6
推荐指数
2
解决办法
5376
查看次数

数组作为const指针

请考虑以下代码:

void Increment(int *arr) {
    arr++;
}

int main() {
    int arr[] = {1,2,3,4,5};
    // arr++  // illegal because its a const pointer
    Increment(arr);   // legal
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果arr是一个const指针,我怎么能把它发送到一个没有接收到const指针的函数?

代码编译时没有丢弃const限定符的警告.

c++ arrays pointers

6
推荐指数
2
解决办法
2983
查看次数

如何在JS中创建一个方法,就像Java中的抽象方法一样?

我正在建造一个小型游戏 - 石头剪刀.

我有一个原型- RPSPlayer我有两种球员:Player1,Player2(PLAYER1&player2与原型RPSPlayer的对象)每个玩家与功能发挥:Player1.play().

每个玩家都有不同的游戏策略.因此,我需要2个实现play().如果它是Java,我将创建一个抽象类,RPSPlayer其中包含一个抽象方法play()和另外两个继承的类RPSPlayer; 他们每个人都有自己的实现play().

我的问题是:在JS中执行此操作的正确方法是什么?我希望我清楚自己,谢谢大家.

javascript

6
推荐指数
1
解决办法
1413
查看次数

声明具有非常量大小变量的数组

我在C学习我的考试,我正在阅读我从某个网站下载的C摘要.有人写道,不允许写一个变量arr[i]在哪里i.唯一的方法是使用malloc.
但是,我编写了以下代码,它在没有警告的情况下编译,并且在valgrind上没有错误:

int index = 5;
int a4[index];

a4[0] = 1;
a4[1] = 2;

int index2;
scanf("%d",&index2);
int a5[index2];
a5[0] = 1;
a5[1] = 2;
Run Code Online (Sandbox Code Playgroud)

那么数组声明背后的真相是什么呢?谢谢!

c arrays

5
推荐指数
1
解决办法
2449
查看次数

send()崩溃了我的程序

我正在运行服务器和客户端.我在我的电脑上测试我的程序.

这是服务器中向客户端发送数据的函数:

int sendToClient(int fd, string msg) {

    cout << "sending to client " << fd << " " << msg <<endl;
    int len = msg.size()+1;
    cout << "10\n";
    /* send msg size */
    if (send(fd,&len,sizeof(int),0)==-1) {
        cout << "error sendToClient\n";
        return -1;
    }
    cout << "11\n";
    /* send msg */
    int nbytes = send(fd,msg.c_str(),len,0); //CRASHES HERE
    cout << "15\n";
    return nbytes;
}
Run Code Online (Sandbox Code Playgroud)

当客户端退出时,它发送到服务器"BYE",服务器正在使用上述功能回复它.我将客户端连接到服务器(它在一台计算机上完成,2个终端),当客户端退出服务器崩溃时 - 它从不打印15.任何想法为什么?任何想法如何测试为什么?

谢谢.

编辑:这是我关闭客户端的方式:

void closeClient(int notifyServer = 0) {

/** notify server before …
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
3
解决办法
3068
查看次数

遍历地图并调用删除其他元素的函数是地图

我有一张在全局记忆中定义的地图.我正在迭代它,让我们说我在第三个元素.现在我正在调用另一个在同一个地图上生成自己的迭代器的函数,但它可能会删除地图中的第4个或第5个......元素.我的问题是,当我从该函数返回并继续迭代地图时(我提醒你我在第3个元素中),我的迭代器可以无效还是安全?

对不起,我不能附上代码,这是非常长的.

谢谢

编辑:我的问题是这样的:

map<string,string> mapi;

void er() {
    mapi.erase("t");
} 

int main() {


mapi.insert(pair<string,string>("w","a"));
mapi.insert(pair<string,string>("e","a"));
mapi.insert(pair<string,string>("r","a"));
mapi.insert(pair<string,string>("t","a"));
mapi.insert(pair<string,string>("A","a"));
mapi.insert(pair<string,string>("u","a"));
mapi.insert(pair<string,string>("C","a"));

map<string,string>::iterator it;
for (it=mapi.begin(); it!=mapi.end(); it++) {
    cout << it->first << endl;
    if (it->first=="t")
        er();
}
Run Code Online (Sandbox Code Playgroud)

}

在这种情况下,我擦除相同的元素 - valgrind说它是一个错误.但是当我删除其他元素时似乎工作正常.

c++ stl

5
推荐指数
1
解决办法
350
查看次数

使用指向char的指针时访问冲突写入位置

我正在写一个非常简单的程序,从字符串中删除重复的字符.我运行了visual studio并得到了错误:

inteviews.exe中0x00d110d9处的未处理异常:0xC0000005:访问冲突写入位置0x00d27830.

我真的不明白这是什么问题.当前单元格获取下一个单元格的值.

void remove(char *str, char a) {
    while (*str != '\0') {
        if (*(str+1) == a) {
            remove(str + 1, a);
        }

        *str = *(str +1 );//HERE I GET THE ERROR
        ++str;
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    char *str = "abcad";

    while (*str != '\0') {
        remove(str,*str);
        str++;
    }

    std::cout << str << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我已经尝试将其更改为char str[] = "abcad"但我仍然得到相同的错误.

c++ string c-strings

5
推荐指数
2
解决办法
1万
查看次数