当前位置: 首页 > 知识库问答 >
问题:

为什么当我编译它时它会抛出一个错误?

董凡
2023-03-14

在index.hpp中,我创建了一个具有多个数据成员的类,如int agestd::string city;等。我在类外部定义了一个构造函数。在program.cpp中,我创建了一个名为SAM的对象。当我试图编译它时,它显示错误。什么原因?

Program.cpp

#include<iostream>
#include "index.hpp"

int main(){
  profile sam("Sam Drakkila", 30, "New York", "USA", "he/him");
  std::cout<<sam.name;
}

index.hpp

#include<iostream>
#include<vector>

class profile{

public:
    std::string name;
  int age;
  std::string city;
  std::string country;
  std::string pronouns;
  std::vector<std::string> hobbies;

};
profile::profile(std::string new_name, int new_age,std::string 
        new_city,std::string new_country, std::string 
         new_pronouns = "they/them"){
 name = new_name;
 age = new_age;
 city = new_city;
 country = new_country;
 pronouns = new_pronouns;
         }

错误信息

In file included from program.cpp:2:0:
index.hpp:15:1: error: prototype for 'profile::profile(std::__cxx11::string, int, std::__cxx11::string, std::__cxx11::string, std::__cxx11::string)' does not match any in class 'profile'
 profile::profile(std::string new_name, int new_age,std::string
 ^~~~~~~
index.hpp:4:7: error: candidates are: profile::profile(profile&&)
 class profile{
       ^~~~~~~
index.hpp:4:7: error:                 profile::profile(const profile&)
index.hpp:4:7: error:                 profile::profile()
program.cpp: In function 'int main()':
program.cpp:5:62: error: no matching function for call to 'profile::profile(const char [13], int, const char [9], const char [4], const char [7])'
   profile sam("Sam Drakkila", 30, "New York", "USA", "he/him");
                                                              ^
In file included from program.cpp:2:0:
index.hpp:4:7: note: candidate: profile::profile()
 class profile{
       ^~~~~~~
index.hpp:4:7: note:   candidate expects 0 arguments, 5 provided
index.hpp:4:7: note: candidate: profile::profile(const profile&)
index.hpp:4:7: note:   candidate expects 1 argument, 5 provided
index.hpp:4:7: note: candidate: profile::profile(profile&&)
index.hpp:4:7: note: candidate: profile::profile(const profile&)
index.hpp:4:7: note:   candidate expects 1 argument, 5 provided
index.hpp:4:7: note: candidate: profile::profile(profile&&)
index.hpp:4:7: note:   candidate expects 1 argument, 5 provided
 .\index }
index.hpp:15:1: error: prototype for 'profile::profile(std::__cxx11::string, int, std::__cxx11::string, std::__cxx11::string, std::__cxx11::string)' does not match any in class 'profile'
 profile::profile(std::string new_name, int new_age,std::string
 ^~~~~~~
index.hpp:4:7: error: candidates are: profile::profile(profile&&)
 class profile{
       ^~~~~~~
index.hpp:4:7: error:                 profile::profile(const profile&)
index.hpp:4:7: error:                 profile::profile()

共有1个答案

松铭
2023-03-14

我在类外定义了一个构造函数

是的,但您没有在类中声明它。
此外,除非您正在创建模板,否则不应该将代码放在头文件中。

要解决问题,请将声明添加到类中:

class profile{

public:
    profile(std::string new_name, int new_age, std::string new_city, std::string new_country, std::string new_pronouns);

    std::string name;
    int age;
    std::string city;
    std::string country;
    std::string pronouns;
    std::vector<std::string> hobbies;
};

您还应该考虑将构造函数的代码移动到index.cpp,并为清楚起见重命名文件profile.hpp和profile.cpp。

 类似资料:
  • 如果你注释掉的内部循环,它会抛出,这显然是因为我们对集合做了更改。 如果取消注释,为什么这个循环允许我们添加这两项?运行它需要一段时间(在奔腾CPU上)大约半分钟,但它不会抛出,有趣的是,它输出: 这有点出乎意料,但它表明我们可以改变,它实际上改变了集合。知道为什么会发生这种行为吗?

  • 我正在编码一个不和谐机器人,它检查用户是否在我的不和谐服务器上,以及他是否有某个角色。然而,我得到一个错误消息,如果用户不是在我的不和,尽管使用捕捉。我有以下代码: 现在,错误消息是: (节点: 15184)UnhandledPromiseRejtionWarning: DiscordAPIError:未知成员在请求Handler.execute(c:\用户\用户\桌面\DiscordBot\My

  • 我使用IntelliJ进行java开发。我想在我只有shell访问权限的另一台主机上运行我的应用程序。 当我在本地运行应用程序时,一切都很好。当我尝试在远程主机上编译代码时,我得到: 文件位于同一目录中: 我也不能在本地编译,除非它来自IDE,所以我假设我只是没有做正确的事情。我错过了什么?我只想能够从shell运行我的应用程序,我真的不在乎如何运行。

  • 进程 c:在函数“主要”中: prog.c:35:20:警告:格式“%d”需要类型为“int”的参数,但参数3的类型为“void * ”[-w format =]printf(" \ n % c \ t % d \ t identifier \ n ",c,p);^ prog. c: 47:24:警告:格式'%d'需要类型'int'的参数,但参数3的类型'void*'[-Wformat=]prin

  • 我正在尝试设置Spring AoP框架,但我不想依赖AspectJ,因此我将在一个bean xml配置文件中声明我的方面、建议等,类似于以下内容: 每当我指定如上所述的切入点时,我都会收到以下错误: 当我把aspectjweaver.jar.包括在内时,我可以做到这一点,但这不应该是这样。有什么想法吗? 提前谢谢

  • 我试图在返回Object的方法中简单地从用户获得输入。由于某种原因,将引发此错误: 线程“main”java.lang.reflect.invocationTargetException在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.invoke0(原生方法)在java.base/jdk.internal.reflect.nativ