小编TiP*_*iPo的帖子

为什么异常的析构函数被调用两次?

我有以下程序:

#include <iostream>
#include <stdexcept>
#include <string>

using namespace std;

class MyError : public runtime_error
{
    public:
        MyError(string mess = "");
        ~MyError(void);
    };

    MyError::MyError(string mess) : runtime_error(mess)
    {
        cout << "MyError::MyError()\n";
    }

    MyError::~MyError(void)
    {
        cout << "MyError::~MyError\n";
    }


int main(void)
{
    try {
        throw MyError("hi");
    }
    catch (MyError& exc) {
        cout << exc.what() << endl;
    }

    cout << "goodbye\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

其中打印以下内容:

MyError::MyError()
MyError::~MyError
hi
MyError::~MyError
goodbye
Run Code Online (Sandbox Code Playgroud)

为什么异常的析构函数(~MyError())被调用两次?

我假设throw创建了一个新对象,但我不明白为什么要调用类析构函数.

c++ destructor

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

为什么编译器在范围中看不到变量?

操作系统:Windows 8.1

编译器:GNU C++

我有两个模板类:base和derived.在基类中我声明了变量value.当我尝试value从派生类的方法应用时,编译器向我报告错误.但如果我不使用模板,我不会收到错误消息.

有错误消息:

main.cpp: In member function 'void Second<T>::setValue(const T&)':
main.cpp:17:3: error: 'value' was not declared in this scope
   value = val;
   ^
Run Code Online (Sandbox Code Playgroud)

有代码:

#include <iostream>

using namespace std;

template<class T>
class First {
public:
    T value;
    First() {}
};

template<class T>
class Second : public First<T> {
    public:
    Second() {}
    void setValue(const T& val) {
        value = val;
    }
};

int main() {
    Second<int> x;
    x.setValue(10);
    cout << x.value << endl;
    return …
Run Code Online (Sandbox Code Playgroud)

c++ scope gnu compiler-errors

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

SimpleXML:带有元素列表或文本的元素

我必须解析一个可以有两种类型的 XML 文件:

<property>
    <value>Some text</value>
</property>
Run Code Online (Sandbox Code Playgroud)

<property>
    <value>
        <item id="first_id"/>
        <item id="second_id"/>
        <item id="third_id"/>
    </value>
</property>
Run Code Online (Sandbox Code Playgroud)

我怎样才能用Java做到这一点?

我创建了一个类:

@Root(strict = false)
public class PropertyValue {
    @ElementList(inline = true, required = false)
    private List<ItemData> items;

    @Text(required = false)
    private String text;
}
Run Code Online (Sandbox Code Playgroud)

ItemDataitem阶级。

但这是行不通的。该代码给了我一个例外:

org.simpleframework.xml.core.TextException: Text annotation @org.simpleframework.xml.Text(data=false, empty=, required=false) on field 'text' private java.lang.String PropertyValue.text used with elements in class PropertyValue
Run Code Online (Sandbox Code Playgroud)

java xml parsing xml-parsing simple-framework

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

为什么线程按此顺序工作?

我有3个课程:Main,CallerCallMe.调用者实现了Runnable.我向Calller constuctor 传递一个指向CallMe实例的指针,以及一条消息,Caller传递给CallMe实例的方法,打印消息.接下来,我开始一个线程.

Main中我创建了3个Caller和I 实例,除了它将在这里打印:

[Welcome]
[to synchronized]
[world!]
Run Code Online (Sandbox Code Playgroud)

但我得到以下结果:

[Welcome]
[world!]
[to synchronized]
Run Code Online (Sandbox Code Playgroud)

为什么?

有代码:

Main.java

public class Main {
    public static void main(String[] args) {
        CallMe target = new CallMe();
        Caller ob1 = new Caller(target, "Welcome");
        Caller ob2 = new Caller(target, "to synchronized");
        Caller ob3 = new Caller(target, "world!");

        try {
            ob1.thread.join();
            ob2.thread.join();
            ob3.thread.join();
        } catch (InterruptedException …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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