shared_ptr 编译器错误无效转换
shared_ptr compiler error invalid conversion
我有一个名为 State
的 class,它有一个 shared_ptr
、weak_ptr
和一个 int
作为它的字段。我还有另一个名为 Automata
的 class,它有一个 shared_ptr
状态。我正在使用 State
来模拟 NFA 中的状态。 Automata
是 NFA 中状态的链表。状态用shared_ptr
表示,自循环用weak_ptr
表示。
class State {
public:
// ptr to next state
std::shared_ptr<State> nextState;
// ptr to self
std::weak_ptr<State> selfLoop;
// char
int regex;
// Constructor
State(const int c) : regex(c){}
// Destructor
~State();
};
#define START 256
#define FINAL 257
class Automata {
private:
std::shared_ptr<State> start;
public:
// Constructor, string should not be empty
Automata(const std::string &str);
// Destructor
~Automata();
// Determine a string matched regex
bool match(const std::string &str);
};
Automata
的构造函数基本上接受一个正则表达式并将其转换为 NFA。(有效!如果您有兴趣,请参阅:https://swtch.com/~rsc/regexp/regexp1.html)
编译Automata
的构造函数时出现编译错误。实现如下
Automata::Automata(const string &str) {
start = make_shared<State>(new State(START)); // Error is here, START defined above
for (loop traversing str) {
//add more states to start
}
}
我收到一个错误,指出
// A lot gibbrish above
Automata.cc:7:45: required from here
/usr/include/c++/4.8/ext/new_allocator.h:120:4: error: invalid conversion
from ‘State*’ to ‘int’ [-fpermissive]
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^
In file included from Automata.h:4:0,
from Automata.cc:2:
State.h:18:2: error: initializing argument 1 of ‘State::State(int)’ [-fpermissive]
State(const int c);
^
不确定我做错了什么。我是 shared_ptr
的新手,所以我不知道这是 make_shared
的问题还是 State
构造函数的错误?你能帮我解决这个问题吗?
你不是要写吗:
Automata::Automata(const string &str) {
start = make_shared<State>(START); // make_shared will call new internally
for (loop traversing str) {
//add more states to start
}
}
?
我有一个名为 State
的 class,它有一个 shared_ptr
、weak_ptr
和一个 int
作为它的字段。我还有另一个名为 Automata
的 class,它有一个 shared_ptr
状态。我正在使用 State
来模拟 NFA 中的状态。 Automata
是 NFA 中状态的链表。状态用shared_ptr
表示,自循环用weak_ptr
表示。
class State {
public:
// ptr to next state
std::shared_ptr<State> nextState;
// ptr to self
std::weak_ptr<State> selfLoop;
// char
int regex;
// Constructor
State(const int c) : regex(c){}
// Destructor
~State();
};
#define START 256
#define FINAL 257
class Automata {
private:
std::shared_ptr<State> start;
public:
// Constructor, string should not be empty
Automata(const std::string &str);
// Destructor
~Automata();
// Determine a string matched regex
bool match(const std::string &str);
};
Automata
的构造函数基本上接受一个正则表达式并将其转换为 NFA。(有效!如果您有兴趣,请参阅:https://swtch.com/~rsc/regexp/regexp1.html)
编译Automata
的构造函数时出现编译错误。实现如下
Automata::Automata(const string &str) {
start = make_shared<State>(new State(START)); // Error is here, START defined above
for (loop traversing str) {
//add more states to start
}
}
我收到一个错误,指出
// A lot gibbrish above
Automata.cc:7:45: required from here
/usr/include/c++/4.8/ext/new_allocator.h:120:4: error: invalid conversion
from ‘State*’ to ‘int’ [-fpermissive]
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^
In file included from Automata.h:4:0,
from Automata.cc:2:
State.h:18:2: error: initializing argument 1 of ‘State::State(int)’ [-fpermissive]
State(const int c);
^
不确定我做错了什么。我是 shared_ptr
的新手,所以我不知道这是 make_shared
的问题还是 State
构造函数的错误?你能帮我解决这个问题吗?
你不是要写吗:
Automata::Automata(const string &str) {
start = make_shared<State>(START); // make_shared will call new internally
for (loop traversing str) {
//add more states to start
}
}
?