这是我的代码:
update
TableB
set
Val2 = a.Val2
from TableB b
inner join TableA a
on a.ID = bookmarking.ID and ABS(bookmarking.Val1) between a.Val2 and a.Val2
好吧,它应该像这样打印一条消息: “你好,我叫玛莎”,但不会打印“你好,我叫玛莎”字符串或“玛莎”名字。为什么会发生?
答案 0 :(得分:2)
修复很简单,可以完全删除所有指针;请参阅下面的代码。我的代码中有许多问题需要我详细解决,包括内存泄漏,未初始化的变量和指针的普遍误用,但是看来您可能来自不同的语言背景,应该花点时间学习良好的实践以及good C++ book中现代C ++中的重要语义和习语。
#include <iostream>
#include <string>
class Human
{
public:
std::string name;
void introduce();
};
void Human::introduce()
{
std::cout << "Hello, my name is " << name << std::endl;
}
int main()
{
Human martha;
martha.name = "Martha";
martha.introduce();
return 0;
}
答案 1 :(得分:0)
对代码的修改很少。 更新的代码以及对所做更改的注释包括在下面。
#include <iostream>
#include <string>
class Human
{
public:
//Removed pointer to a string
//Cannot have an instantiation inside class declaration
//std::string * name = new std::string();
//Instead have a string member variable
std::string name;
void introduce();
};
void Human::introduce()
{
//Human::name not required this is a member function
//of the same class
std::cout << "Hello, my name is " << name << std::endl;
}
int main()
{
Human *martha = new Human();
//Assign a constant string to string member variable
martha->name = "Martha";
martha->introduce();
return 0;
}
如@alter igel所建议-The Definitive C++ Book Guide and List将是一个不错的起点。
答案 2 :(得分:-2)
#include <iostream>
#include <string>
class Human {
public:
void Human(std::string* n) { name = n; }
void introduce();
private:
std::string* name;
};
void Human::introduce() {
std::cout << "Hello, my name is " << name << std::endl;
}
int main() {
Human* martha = new Human(new std:string("Martha"));
martha->introduce();
return 0;
}
尝试一下。不同之处在于您没有在类定义中初始化变量,而是使用构造函数来初始化名称。您可以将方法定义拆分为自己的部分,但只有一行,可以放在类定义中。