我无法弄清楚为什么会得到Unhandled exception at 0x003DBD00 in Project10.exe: 0xC0000005: Access violation reading location 0xCDCDCDE5.
它似乎弹出一个类似于此的字符串赋值运算符:std::string x = std::move(std::string y);
请参阅下面的代码以获取更多信息。
通话从这里开始:*members += NVPair<std::string, std::string>(n,v);
FYI会员members = new List <NVPair <std::string, std::string>, DATA_MEMBERS_PER_OBJECT>();
DATA_MEMBERS_PER_OBJECT
为4
列出类声明:
auto list = new List <T, OBJECTS_PER_JSON_FILE>(); //Not used in this process
auto members = new List <NVPair <std::string, std::string>, DATA_MEMBERS_PER_OBJECT>();
接线员:
n = trim(trim(getName(line)),'"'); //Trim removes extra characters from line and returns Name
v = trim(trim(getValue(line)),'"'); //or Value as a std::string
*members += NVPair<std::string, std::string>(n,v);
列表类
//List.h
#include <iostream>
#include <string>
template <typename T, unsigned int n>
class List{
T *Array[n];
size_t elements;
T dummy;
public:
List(){ elements = 0u; }
size_t size() const { return elements; }
const T& operator[](unsigned int i) const{...}
void operator+=(const T& add){ //adds a copy to the element
*Array[elements] = add;
elements++;
}
void operator+=(T&& add){ //moves element
*Array[elements] = std::move(add);
elements++;
}
名称值对类
//NVPair.h
#include <iostream>
#include <string>
template <typename T, typename B>
class NVPair{
T Name;
B Value;
public:
NVPair(){ Name = ""; Value = ""; }
NVPair(T n, B v){ Name = n; Value = v; }
T name() const { return Name; }
B value() const{ return Value; }
NVPair& operator=(const NVPair& add){
Name = add.Name;
Value = add.Value;
return *this; }
NVPair& operator=( NVPair&& add){
Name = std::move(add.Name);
Value = std::move(add.Value);
return *this; }
};
我一直在尝试调试它并且它失败并进入NVPair =函数内Name = std::move(add.Name)
的xstring。
非常感谢任何帮助!
编辑:看起来我很模糊(对不起第一次)。所以主程序从包含Name和value对的文件中读取信息。然后,它创建一个List对象,该对象是指向Name值对象对象的指针数组。所以T * Array[n]
是一个T指针数组。目的是存储来自如下文件的信息:
{
"Name" : "Cat"
"type" : "animal"
}
依旧......
答案 0 :(得分:0)
List类中的数组成员永远不会被初始化,但是您在+ =运算符中引用它。另外,我认为你想要一个NVPairs数组而不是NVPair指针数组
尝试按照以下方式行事:
template <typename T>
class List
{
T Array[n];
size_t size;
size_t elements;
T dummy;
public:
List(size_t maxSize) : size(maxSize), elements(0)
{
Array = new T[size];
}
void operator+=(T&& add)
{ //moves element
//This was where it was failing because Array was not defined
Array[elements] = std::move(add);
elements++;
}
//The rest of the class
}
构造函数将创建一个NVPairs数组,然后按正常方式分配值。请注意,您需要2个变量,一个用于大小,一个用于当前在数组中的元素数。