gpt4 book ai didi

C++ "Could not convert '类实例'从 'Class (*)()'到 'Class'”

转载 作者:行者123 更新时间:2023-11-30 05:29:49 26 4
gpt4 key购买 nike

我正在用 c++ 编写一个类,在 Debian 上使用 g++ 编译时会抛出上述错误。我认为问题可能出在我使用的自定义数据结构中,但我不确定也无法找到关于此特定错误的任何其他问题。

这是主类:

//3-Space Object tests

#include <iostream>
#include "obj3.h"
#include <string>
#include <math.h>

using namespace Eigen;

void print_obj_attributes(Obj3 obj)
{
std::cout << obj.get_owner() << std::endl;
...
std::cout << obj.get_bounding_box() << std::endl;
}

int main()
{
//Set up some objects
Obj3 obj2 ();

//Print out the object attributes to test the getters and initializers

std::cout << "Object 2" << std::endl;
print_obj_attributes(obj2);

obj3.h 文件(及其配套的 cpp 文件)都可以使用 g++ 正确编译。我删除了一些元素并且不包括 cpp 文件以节省空间。 #ifndef OBJ3_H #定义 OBJ3_H

#include <string>
#include <Eigen/Dense>
#include "list.h"

class Obj3
{
private:
//String Attributes
std::string name;
...

//Float Matrices for location, rotation, & scaling
Eigen::Vector3f location;
...

//Private constructor for internal matrices
void initialize_matrices();
void initialize_buffers();

//A list of scenes
List <std::string> scene_list;

public:
//Constructor
Obj3() {initialize_matrices(); owner=""; ...}
//Methods for controlling scene list

//Get a scene
std::string get_scene(int index){return scene_list.get(index);}

//Add a scene
bool add_scene(std::string scene_id){scene_list.append(scene_id);return true;}

//Remove a scene
bool remove_scene(int index){scene_list.remove(index); return true;}

//Getters & Setters for string attributes

//Set the name
bool set_name(std::string new_name, std::string device_id){name=new_name; return true;}
//Getter
std::string get_owner() {return owner;}
...

我认为还有一些其他方法不会导致任何问题。下面是我认为是问题所在的 List.h 文件:

#ifndef LIST_H
#define LIST_H

template <class T>
class List
{
T *int_array;
int cur_int_array_size;
int current_length;
void extend_array()
{
int cur_len = 0;
int n=0;
cur_len = cur_int_array_size;
T *new_array = new int[cur_len+10];
for (n=0;n<cur_int_array_size;n++)
{
new_array[n] = int_array[n];
}
delete int_array;
int_array = new_array;
cur_int_array_size=cur_int_array_size+10;
}
public:
List() {current_length=0;cur_int_array_size=10;int_array=new int[10];}
~List() {delete int_array;}
T get (int index) {return int_array[index];}
void append (T obj) {if (current_length == cur_int_array_size) {extend_array();} int_array[current_length+1] = obj; current_length++;}
void insert (int index, T obj) {if (current_length == cur_int_array_size) {extend_array();} int_array[index] = obj; current_length++;}
void remove (int index) {int i=index;for (i=index; i < cur_int_array_size - 1; i++) {int_array[i] = int_array[i+1];}current_length--;}
int length () {return current_length;}
};
#endif

此 cpp 文件只是 list.h 文件的 include 语句。

列表文件编译成功:

g++ -c -o list.o list.cpp

Obj3 文件编译成功:

g++ -c -o obj3.o obj3.cpp

我正在尝试编译 Obj3 测试(主模块):

g++ -c -o obj3_test.o obj3_test.cpp

这是我收到错误的时间:

 in function 'int main()':
could not convert ‘obj2’ from ‘Obj3 (*)()’ to ‘Obj3’

在此之后,最后一步应该是编译测试:

g++ -o obj_test list.o obj3.o obj3_test.o

最佳答案

要创建 Obj3 的默认构造实例,请编写

Obj3 obj2;

代替

Obj3 obj2 ();

后者声明了一个返回Obj3类型对象的函数。

关于C++ "Could not convert '类实例'从 'Class (*)()'到 'Class'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36255951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com