我正在研究课堂上的问题。这是关于创建一个“ addressType”类,并使用它与已经写好的主函数进行交互。 该程序无法正常工作,我得到的主要错误是“ addressType.cpp:6:7:错误:'addressType'类addressType {的重新定义。为什么认为我要重新宣布课程?我想我对C ++语法还不够熟悉。我真的没有C ++的经验,我是Java的人。
这是我的.h文件代码的示例...
#ifndef ADDRESSTYPE_H_INCLUDED
#define ADDRESSTYPE_H_INCLUDED
#include <string>
#include <cstring>
#include <iostream>
using namespace std;
class addressType {
private:
string address;
string city;
string state;
int zipcode;
public:
addressType();
addressType(string inputAddress, string inputCity, string inputState, int inputZipcode);
void setAddress(string inputAddress);
void setCity (string inputCity);
//more functions i didn't paste
}; #endif
,依此类推。这是.cpp的示例:
#include "addressType.h"
#include <iostream>
using namespace std;
class addressType {
private:
string address;
string city;
string state;
int zipcode;
public
addressType() {
address = "aa";
city = "aa";
state = "XX";
zipcode = 10000;
}
addressType(string inputAddress, string inputCity, string inputState, int inputZipcode) {
address = inputAddress;
city = inputCity;
setState(inputState);
setZipcode(inputZipcode);
}
void setAddress(string inputAddress) {
address = inputAddress;
}
//more functions I didn't paste
};
我得到的主要信息是: addressType.cpp:6:7:错误:重新定义了“ addressType” 类addressType。
答案 0 :(得分:1)
您需要做两件事:
完全摆脱.cpp文件中addressType
的定义
用addressType::
前缀组成类的方法,例如void addressType::setAddress(string inputAddress) {...
通过这种方式,您只定义一次类(这是必需的,在任何单个翻译单元中都是如此),然后告诉编译器方法体属于哪个类。
答案 1 :(得分:0)
为什么认为我要重新宣布课程?
因为你是
不过,更具体地说,重新声明不是问题。重新定义是问题所在。第一个定义在addressType.h
文件中。您将此文件包含在“ .cpp”中,然后重新定义addressType
。这违反了一个定义规则。
解决方案是不要多次定义类。
答案 2 :(得分:0)
@Paul Sanders为您回答了这个问题,但只是为了向您展示他在说什么:
.h
#pragma once
#include <string>
class AddressType {
private:
std::string address;
std::string city;
std::string state;
int zipcode;
public:
AddressType();
AddressType(std::string inputAddress, std::string inputCity, std::string inputState, int inputZipcode);
};
.cpp
#include "add.h"
using namespace std;
AddressType::AddressType()
{
address = "aa";
city = "aa";
state = "XX";
zipcode = 10000;
}
AddressType::AddressType(string inputAddress, string inputCity, string inputState, int inputZipcode)
: address(inputAddress)
, city(inputCity)
, state(inputState)
, zipcode(inputZipcode)
{
// no-op
}
与您的问题和建议无关,请避免在标题中使用using namespace
:"using namespace" in c++ headers