基本上我想要的是认为,字段名(字符串)映射到任何类型值的一个HashMap为此我写了持有型和价值信息的单独MyField的MyClass类..
这是我到目前为止:
template <typename T>
class MyField {
T m_Value;
int m_Size;
}
struct MyClass {
std::map<string, MyField> fields; //ERROR!!!
}
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,地图声明失败,因为我没有为MyField提供类型参数...
所以我想它必须是这样的
std::map< string, MyField<int> > fields;
Run Code Online (Sandbox Code Playgroud)
要么
std::map< string, MyField<double> > fields;
Run Code Online (Sandbox Code Playgroud)
但显然这会破坏我的整个目的,因为声明的地图只能保存特定类型的MyField.我想要一个可以容纳任何类型的MyField clas的地图.
有什么办法可以实现这个目的吗?
在我的c ++代码中,我有一段代码,它给我一个"访问冲突写入位置..."当用户输入无效时的例外.
我试图在我的try/catch块中捕获此异常,以便在发生异常时显示错误消息..但由于某种原因它没有捕获错误.
try {
// ... some code that causes Access Violation Writing Location Exception
}
catch (...) {
std::cout << "invalid user input" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我这样做了,但是当异常发生时,控制台不会显示我的错误消息,但是说有一个
Unhandled exception at 0x0F0B0E9A (msvcr110d.dll) in Example.exe : Access violation writing location
Run Code Online (Sandbox Code Playgroud)
所以看起来我的try/catch块没有捕获异常......
我设置了断点以确保在try块中发生异常..而且我100%就是这种情况..
为什么"catch(...)"没有捕获Access Violation异常?
我想知道是否有办法结合#define和#ifndef宏..
这意味着我想在#define宏中使用#ifndef宏.
由于它很难解释,这是我想要做的一个例子:
#define RUN_IF_DEBUG \
#ifndef DEBUG_MODE \
; // do nothing \
#else \
cout << "Run!" << endl; \
#endif
int main() {
RUN_IF_DEBUG
}
Run Code Online (Sandbox Code Playgroud)
所以我希望RUN_IF_DEBUG宏只在DEBUG_MODE被定义的情况下运行...
有没有办法做到这一点?
当我使用STL向量存储类对象时,我观察到一个非常奇怪的副作用,其中push_back方法修改了现有数据!
基本上我有一个包含多个字段的类,如下所示:
class MyClass {
MyClass(std::string s, int i) {
StringValue = s;
IntValue = i;
}
std::string StringValue;
int IntValue;
}
Run Code Online (Sandbox Code Playgroud)
我有一个向量,其中包含指向 MyClass 对象的指针..然后我基本上推回对对象的引用:
std::vector<MyClass*> MyVector;
MyClass c1("CLASS 1", 1);
MyClass c2("CLASS 2", 2);
MyVector.push_back(&c1);
// Result:
// *MyVector[0] ==> ("Class 1", 1)
MyVector.push_back(&c2);
// Result:
// *MyVector[0] ==> ("Class 2", 2) ??why 2??
// *MyVector[1] ==> ("Class 2", 2)
Run Code Online (Sandbox Code Playgroud)
你看到我得到的奇怪结果了吗?我在每个push_back语句之后设置了断点,并且发生了这种奇怪的事情。
第一个 Push_back 语句工作正常。但是第二个push_back语句修改了第一个元素的内容,这对我来说没有意义。
我假设它与我存储引用而不是向量内的实际对象有关......但我无法弄清楚出了什么问题。
我该如何处理这个问题?有什么见解吗?
谢谢
更新:
(简化代码)
MyClass c1("CLASS 1", 1);
MyClass c2("CLASS …
Run Code Online (Sandbox Code Playgroud) 正如你可能从我的问题中得知的那样,我是一个c ++新手
我不确定将一个字符串的值复制到另一个字符串的正确方法是什么.
比如我这样做了:
std::string x = "this is x";
std::string y = "this is y";
x = y;
Run Code Online (Sandbox Code Playgroud)
没有错误,但这没有做任何事情..
我知道有字符串:: copy ...但似乎这个函数需要缓冲区大小等...这很烦人..
有没有一种简单的方法在c ++中完成这项工作?
谢谢
UPDATE!
对不起,我觉得我的答案太简单了.....这是我的情况:
class MyClass {
std::string m_str = "OLD STRING";
}
void CopyString(MyClass& c, std::string x) {
c.m_str = x;
}
int main() {
MyClass c;
CopyString(c, "NEW STRING");
std::cout << c.m_str << std::endl; // prints "OLD STRING"!!
}
Run Code Online (Sandbox Code Playgroud)