【发布时间】:2018-07-05 16:50:33
【问题描述】:
我是 C++ 新手,但在处理类和头文件时遇到了问题。我正在尝试创建一个构造函数来接受各种口袋妖怪统计信息,例如字符串和整数。我以前用 java 编写代码,构造函数的赋值相当简单。
口袋妖怪.h
#ifndef POKEMONS_H
#define POKEMONS_H
#include <string>
#include <iostream>
using namespace std;
class Pokemons {
public:
Pokemons();
};
#endif /* POKEMONS_H */
口袋妖怪.cpp
#include "Pokemons.h"
#include <string>
using namespace std;
string pokemonName;
string pokemonType1;
string pokemonType2;
int pokemonHP;
int pokemonAttack;
int pokemonDefence;
int pokemonSPAttack;
int pokemonSPDefence;
int pokemonSpeed;
Pokemons::Pokemons(string nm, string tp1, string tp2, int hp, int atk,
int def, int satk, int sdef, int spd) {
pokemonName = nm;
pokemonType1 = tp1;
pokemonType2 = tp2;
pokemonHP = hp;
pokemonAttack = atk;
pokemonDefence = def;
pokemonSPAttack = satk;
pokemonSPDefence = sdef;
pokemonSpeed = spd;
}
main.cpp
#include <iostream>
#include "Pokemons.h"
int main(){
Pokemons p001;
p001.Pokemons("Bulbasaur", "Grass", "None", 31,23,45,43,45,12);
return 0;
}
我收到以下错误:
Pokemons.cpp:32:9: error: prototype for 'Pokemons::Pokemons(std::string, std::string, std::string, int, int, int, int, int, int)' does not match any in class 'Pokemons'
Pokemons::Pokemons(string nm, string tp1, string tp2, int hp, int atk, int def, int satk, int sdef, int spd) {
In file included from Pokemons.cpp:14:0:
Pokemons.h:21:7: error: candidates are: constexpr Pokemons::Pokemons(Pokemons&&)
class Pokemons {
Pokemons.h:21:7: error: constexpr Pokemons::Pokemons(const Pokemons&)
Pokemons.cpp:30:9: error: Pokemons::Pokemons()
Pokemons::Pokemons(){}
【问题讨论】:
-
有几件事你可以用谷歌搜索:“类初始化”、“初始化列表”。除非您必须,否则不要使用构造函数主体。
-
pokemonName...pokemonSpeed应该在您的类定义中,而不是在源文件中的全局变量中。 -
所有成员声明都应该在类定义之内,而不是在它之外。 (它看起来很像对应的 Java。)
标签: c++ class oop object constructor