这是我的代码,Visual Studio一直告诉我"没有合适的构造函数"
@SmallTest
@Test
public void testUsesNoV1MapLibrary() {
packageInfo = context.getPackageManager().getPackageInfo(
PackageManager.GET_SHARED_LIBRARY_FILES
);
final ApplicationInfo applicationInfo = packageInfo.applicationInfo;
String[] sharedLibraries = applicationInfo.sharedLibraryFiles;
if (sharedLibraries != null) {
for (String libraryPath : sharedLibraries) {
assertThat("no com.google.android.maps.jar in use", libraryPath.contains("com.google.android.maps"), is(false));
}
}
}
我的猜测是我错过了节点的默认构造函数,但我觉得我不需要它,因为编译器会为你安装一个。不知道什么是错的
答案 0 :(得分:0)
添加
Node::Node()
{
number = 0;
left = 0;
right = 0;
};
如注释中所述,如果定义自定义构造函数,则不会添加默认构造函数。
另外,如下所述,这个
Node::Node() : number(0), left(nullptr), right(nullptr) {}
效率更高,我推荐。
答案 1 :(得分:0)
如果定义构造函数,则需要定义默认构造函数。从C ++ 11开始,你可以使用默认关键字
强制一个答案 2 :(得分:0)
您可以简单地强制编译器生成默认构造函数:
struct Node
{
Node(int a, int b, int c);
Node() = default; // <<<<<<<<<<<<<<<
// ...
};
一旦声明自己的构造函数,编译器就不会生成默认构造函数。
答案 3 :(得分:0)
在C ++中,如果定义自己的构造函数,则会禁用默认构造函数。因此,如果您有自己的构造函数,则无法调用默认构造函数。
如果你也需要默认的构造函数,你也必须实现它。
这样做:
Node::Node()
{
left = //default value
right = //default value
number = //default value
}
答案 4 :(得分:0)
您可以更新现有的构造函数,如:
Node::Node(int a = 0, int b = 0, int c = 0) : number(a), left(b), right(c)
{
};
使用此定义,您可以按以下方式创建对象:
Node* n1 = new Node;
Node* n2 = new Node(2, 3, 5);
答案 5 :(得分:-1)
您的向量中似乎需要n
个元素,而不是2 * n
元素。您的代码目前尝试使用n
元素预填充向量,但由于没有默认的Node
值而失败,而然后您尝试插入另一个n
元素} elements。
如果您将逻辑修复为而不是开头的向量中有任何元素,那么您也不需要默认构造函数。只需替换BST
的定义:
vector<Node> BST;
for (int i = 0; i != n; ++i) {
// ...
BST.push_back(some_value);
}
您的代码还有其他问题(包括明显的内存泄漏)。这些是您的程序的改进版本,您可以在自己的时间内分开,而不是详细说明它们:
struct Node {
Node(int a, int b, int c) : left(b), right(c), number(a) {}
int left;
int right;
int number;
};
#include <cstdlib>
#include <iostream>
#include <vector>
int main() {
int n, number, left, right;
if (!(std::cin >> n)) { std::cerr << "Input error!\n"; std::abort(); }
std::vector<Node> BST;
for (int i = 0; i < n; i++) {
if (!(std::cin >> number >> left >> right)) {
std::cerr << "Input error!\n"; std::abort();
}
BST.emplace_back(number, left, right);
}
for (const Node& node : BST) {
std::cout << node.number << "\n";
}
}