C++ C++;-导致SIGSEV信号的空方法

C++ C++;-导致SIGSEV信号的空方法,c++,segmentation-fault,C++,Segmentation Fault,我正在为一个大学作业制作一个简单的面向对象的系统,我被这个问题困住了 我已经建立了一个简单的测试类,它调用对象中的各种方法 int main() { Deck deck = Deck(); deck.DisplayDeck(); deck.Shuffle(); deck.DisplayDeck(); Hand hand = Hand(1); Card* card; card = deck.DealNextCard(); hand.AddCard(card); hand.ftring(); dec

我正在为一个大学作业制作一个简单的面向对象的系统,我被这个问题困住了

我已经建立了一个简单的测试类,它调用对象中的各种方法

int main() {
Deck deck = Deck();
deck.DisplayDeck();
deck.Shuffle();
deck.DisplayDeck();
Hand hand = Hand(1);
Card* card;
card = deck.DealNextCard();
hand.AddCard(card);
hand.ftring();
deck.DisplayDeck();
}
问题出现在
hand.ftring()
。当我调用它时,它会导致分段错误。奇怪的是,它不包含代码

hand.cpp中

string Hand::ftring() {
}
如果我删除它,它将运行到完成。如果我向该方法添加控制台输出,它会打印输出,然后崩溃。我完全不知道该怎么做,因为调试器只说明了这一点

Program received signal SIGSEGV, Segmentation fault.
In ?? () ()

您声明在ftring函数中返回一个字符串,但实际上并没有返回任何内容。这很糟糕。

您的方法必须返回一个
字符串
-这就是您声明它的方式。你的行为不明确。

该死的。这就是为什么我更喜欢Java/C。它指出,当我愚蠢地跳过类似的东西!谢谢,伙计:)没问题。C++有很多窍门;我建议您将编译器选项设置为最大严格,并将警告转换为错误。这会让你更快地发现问题。我发现很难相信 G++< /COD>在默认情况下,甚至不会发出关于此的警告(默认情况下,MSVC将此视为C++的错误,这是C的警告)。要获得有关此问题(以及更多)的警告,请在使用gcc/g++编译时使用
-Wall
选项。您还可以更改
Hand=Hand(1)
手(1)并避免由于分配而产生额外副本。