class_one.h:C++ определение конструктор из заголовка
#ifndef CLASS_ONE
#define CLASS_ONE
#include <string>
namespace ones{
typedef enum{BLACK, WHITE, RED} b_color;
typedef char b_letter;
const b_letter letters[4] = {'A', 'B', 'C', 'D'};
class one{
b_color color;
b_letter letter;
public:
one(b_color, b_letter);
std::string combo();
b_color getColor();
b_letter getLetter();
};
}
#endif
Учитывая этот файл заголовка, как я должен идти о создании файла .cpp, и как тогда экземпляр этого класса в другом файле, main.cpp ? Я думаю, что-то вроде этого:
class_one.cpp
#include <iostream>
#include "class_one.h"
using namespace ones;
class one
{
b_color color;
b_letter letter;
public:
one(b_color c, b_letter l) //Not sure about this one..
{
color = c;
letter = l;
}
std::string combo()
{
return "blahblah temporary. letter: " + letter; //not finished
}
b_color getColor()
{
return color;
}
b_letter getLetter()
{
return letter;
}
};
, а затем создать его экземпляр, я хотел бы сделать что-то вроде этого:
main.cpp
#include "class_one.h"
int main()
{
ones::one test(ones::BLACK, ones::letters[0]);
//cout<<test.name()<<endl;
return 0;
}
Все извлечено из большего кластера файлов s, но это основное условие моего вопроса. Файл заголовка должен быть правильным, но я не уверен, как создать экземпляр класса «один», а не с помощью этого конструктора. Я думаю, что конструктор, который я определил в .cpp, неверен. Я привык к Java, поэтому я никогда не видел конструктора, подобного тому, который есть в файле заголовка, если он даже конструктор. Для меня это выглядит как method(int, int)
вместо того, что я привык: method(int a, int b)
При запуске этого я получаю эту ошибку:
main.obj : error LNK2019: unresolved external symbol "public: __thiscall ones::one::one(enum ones::b_color, char)" ([email protected]@@[email protected][email protected]@[email protected]) referenced in function _main
<path>/project.exe : fatal error LNK1120: 1 unresolved externals
Извините за невероятно глупое наименование у меня есть здесь, но это имеет смысл для целей , Может быть, некоторые ошибки ввода в кодах вопросов, как я написал большую часть этого вручную прямо сейчас. Любая помощь приветствуется ..
О, я думал, что это то, что «использует пространства имен», делалось для меня в файле .cpp. Но все в порядке, я попробовал это сейчас, но «Visual C++ 2010 Express» дает мне красные строки и ошибки при всех теперь методы, говорящие «Ошибка: квалификатор должен быть базовым классом« один ». И конструктор говорит «Ошибка: тип, используемый как имя конструктора, соответствует типу« один », и он дает мне два разных« примера вызовов »или что-то еще:' one :: one (ones :: b_color c, b_letter l) ' и 'one :: one (const one &)', что заставляет меня думать, что первый пример - это то, что я пытаюсь сделать, а второе - то, что он хочет, чтобы я звонил? – Sti
Дайте мне минутку ... – Avi
Мое плохое, должно быть одно :: одно :: b_color и одно :: одно :: b_letter. Или вы можете «использовать пространства имен»; и я думаю, что это должно работать, если вы удалите «ones ::» в файле cpp. Измените мой ответ, чтобы это отразить. – Avi