小编Gam*_*anA的帖子

MinGW c ++编译器zlib1.dll缺少错误?

我刚刚开始学习C++ for school,我正在尝试下载编译器MinGW来编译我的源代码.但是,每次我尝试编译程序时,都会显示一条错误消息,说明zlib1.dll缺少该程序.

这是错误消息

程序无法启动,因为您的计算机缺少zlib1.dll

我试过安装/重新安装没有运气.我不知道这里有什么问题?

任何人都可以帮我解决这个问题,因为我有一些我需要做的功课,但我不能没有编译器.

谢谢.

c++ mingw compilation

26
推荐指数
3
解决办法
6万
查看次数

push和pop如何在程序集中工作

我对pop组装中的实际操作感到困惑.是否pop将值PUSHed最后移动到堆栈上(意味着如果我们MOV在最后一个元素之后的值,它不适用PUSH)或者它只是弹出堆栈中最后一个值(因此,应用于两个MOVPUSH),或者它会弹出堆栈指针指向的值吗?请考虑以下代码:

push $4
mov $5, -4(%esp)
add $4, %esp (esp pointing to an unknown value)
pop %ebp
Run Code Online (Sandbox Code Playgroud)

所以在这段代码中,值的值ebp是4,5,还是指向的未知值esp

x86 assembly callstack

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

这个语法是什么意思,“类模板 <class R, class ...Args> 类名 <R(Args...)>”

我一直在尝试更多关于 C++ 中的多线程编程,但我很难理解,std::promise所以我开始在这个网站上寻找答案,结果发现有人和我有同样的问题。但是阅读答案让我更加困惑,这是答案中的代码,大概是类似的实现std::packaged_task

template <typename> class my_task;

template <typename R, typename ...Args>
class my_task<R(Args...)>
{
    std::function<R(Args...)> fn;
    std::promise<R> pr;             // the promise of the result
public:
    template <typename ...Ts>
    explicit my_task(Ts &&... ts) : fn(std::forward<Ts>(ts)...) { }

    template <typename ...Ts>
    void operator()(Ts &&... ts)
    {
        pr.set_value(fn(std::forward<Ts>(ts)...));  // fulfill the promise
    }

    std::future<R> get_future() { return pr.get_future(); }

    // disable copy, default move
};
Run Code Online (Sandbox Code Playgroud)

在此代码中,

1-这个语法是什么意思template <typename R, typename ...Args> class my_task<R(Args...)>,更具体地说,目的是什么<R(Args...)>

2-为什么班级有前向减速?

谢谢

c++ multithreading promise packaged-task variadic-templates

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

两个进程如何共享同一个共享库?

我一直在努力更好地了解共享库的工作原理,但我无法围绕两件事进行思考。

1- 每个进程都有自己的虚拟内存空间和页表,因此如果共享库被加载到一个进程虚拟内存空间中,那么第二个进程如何访问该共享库,因为它不在其内存空间中?

2- 我知道只有文本部分是共享的,而全局数据不是,这怎么可能?我的理解是,对全局变量的每次引用都是通过全局偏移表(简称 GOT)完成的。所以,如果我有这行代码,x = glob那么这将大致等于mov eax,DWORD PTR [ecx-0x10]汇编中的东西,其中ecx用作 GOT 的基值。但如果是这种情况,那么很明显,无论哪个进程调用该行,它将始终访问相同的全局变量,其地址位于 GOT 中的偏移量 0x10。那么,如果两个进程使用引用相同 GOT 条目的相同文本部分,那么它们如何拥有不同的全局变量副本呢?

unix shared-libraries dynamic-linking position-independent-code got

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

EIP寄存器如何获取其值?

我刚刚开始在学校学习汇编,我们开始深入研究寄存器以及如何使用它们。我似乎无法理解的一点是指令指针如何获取下一条指令的地址?例如,采用以下代码:

nop
pushl    %ebp
movl    %esp, %ebp
subl    $4, %esp
Run Code Online (Sandbox Code Playgroud)

在前面的代码中,指令指针在每一行之后都会递增,我想知道它如何知道下一步要执行哪条指令(即,,,mov...等)?当我们第一次运行程序时,所有前面的指令都会首先加载到 RAM 中,并且第一条指令(在本例中)的地址会自动加载到 中,然后它会逐一遍历它们吗?或者我错过了什么?subpushnopeip

任何帮助表示赞赏。

x86 assembly pointers eip

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

`shared_ptr`s 如何实现协方差?

可以shared_ptr<Base>shared_ptr<Deriver>(即shared_ptr<Base> ptr = make_shared<Derived>())复制或构造一个。但是我们都知道,模板类之间是不能相互转换的,即使模板参数可以。那么如何shared_ptr检查它们的指针的值是否可以转换,如果可以转换呢?

c++ polymorphism inheritance covariance shared-ptr

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

默认情况下,所有Swing组件都在EDT上运行吗?

我是Java的新手,在阅读了很多关于线程和swing的文章后,我明白所有Swing方法的调用都应该在EDT上完成,因为Swing不是线程安全的.但是,在阅读有关EDT之前,我已经编写了几个相当长的Swing应用程序.我的所有应用程序都运行得很好.所以我的问题是我的Swing应用程序默认运行在EDT上,还是在不同的线程上运行,我很幸运,没有任何问题?例如,如果我将JButton添加到JPanel或JFrame,或者我只是调用JTextField Field.setText(),那么默认情况下这些操作是否会在EDT上运行?如果答案是否定的,那么我是否必须通过调用显式发送我的所有Swing组件的方法实现以在EDT上运行SwingUtilities.invokeLater()

谢谢

java swing multithreading

4
推荐指数
1
解决办法
390
查看次数

为什么make_unique使用new,而make_shared使用:: new

我正在一个项目中,其中几个类重载了运算符newdelete利用了自由列表,make_shared当我意识到make_shared不使用重载版本而是进行显式调用时,我尝试使用智能指针来管理分配。全球::new。但根据 make_unique确实使用了重载版本。这让我很困惑。为什么make_shared选择忽略运算符重载而make_unique不是?

c++ smart-pointers operator-overloading new-operator

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

类体内的前向声明是否被视为其他类型?

我在一个封闭的类中有两个内部结构,在其中一个结构中,我有一个指向另一个结构类型的对象的指针成员。为了提高可读性并明确指出前向声明适用于需要它的结构,我将前向声明放在内部结构本身中。像这样

class Enclosing{
public:
    struct InnerA{
       struct InnerB; // forward declaration inside InnerA to improve readability  
       InnerB* b; 
       // other members
   };

    struct InnerB{

       // lots of member variables
    };
};
Run Code Online (Sandbox Code Playgroud)

然后在外面的某个地方我有一个功能

void DoSomething(){
    Enclosing::InnerA a;


    // error incompatible types Enclosing::InnerB* and Enclosing::InnerA::InnerB*
    Enclosing::InnerB* ptr = a.b; 
}
Run Code Online (Sandbox Code Playgroud)

据我了解,前向声明仅是一种告诉编译器类的方法,而不是定义完全不同的新类型。这是标准吗?如果是这样,是否有一种方法可以在结构内部包含前向声明而不将其视为其他类型?

c++ inner-classes forward-declaration c++11

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

在字符串中使用擦除函数是否会使迭代器无效

我有以下代码,它接受一个字符串并删除非字母字符

void removeNonAlpha(string& str){
    for (string::iterator it = str.begin(); it < str.end(); it++){
        if (!(isUpperCaseLetter(*it) || isLowerCaseLetter(*it) || str == ' '))  
            str.erase(it--);

    }
}
Run Code Online (Sandbox Code Playgroud)

我向我的教授展示了这个,他告诉我这样做是有风险的,因为它可能会使我正在使用的迭代器失效。但是,我认为擦除只会使擦除点之后的迭代器无效,并且我确保在该点之后不使用任何迭代器。那么这段代码是否会崩溃或导致任何未定义的行为?

c++ string iterator erase invalidation

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