1

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 

Извините за невероятно глупое наименование у меня есть здесь, но это имеет смысл для целей , Может быть, некоторые ошибки ввода в кодах вопросов, как я написал большую часть этого вручную прямо сейчас. Любая помощь приветствуется ..

ответ

2

Ваш файл каст должен выглядеть следующим образом:

#include "class_one.h" 

ones::one::one(ones::one::b_color c, ones::one::b_color l) 
{ 
    //code here 
} 

std::string ones::one::combo() 
{ 
    // code here 
} 

// additional functions... 

И так далее. Вы не переопределяете класс блоком класса, вы просто указываете отдельные определения функций, как я показал здесь. Формат определения функции должен быть примерно таким:

[return type] [namespace]::[class]::[function]([parameters]) 
{ 
    // code here 
} 

Похоже, вы хороши при создании экземпляра. Вам также не нужно обновлять переменные-члены.

+0

О, я думал, что это то, что «использует пространства имен», делалось для меня в файле .cpp. Но все в порядке, я попробовал это сейчас, но «Visual C++ 2010 Express» дает мне красные строки и ошибки при всех теперь методы, говорящие «Ошибка: квалификатор должен быть базовым классом« один ». И конструктор говорит «Ошибка: тип, используемый как имя конструктора, соответствует типу« один », и он дает мне два разных« примера вызовов »или что-то еще:' one :: one (ones :: b_color c, b_letter l) ' и 'one :: one (const one &)', что заставляет меня думать, что первый пример - это то, что я пытаюсь сделать, а второе - то, что он хочет, чтобы я звонил? – Sti

+0

Дайте мне минутку ... – Avi

+0

Мое плохое, должно быть одно :: одно :: b_color и одно :: одно :: b_letter. Или вы можете «использовать пространства имен»; и я думаю, что это должно работать, если вы удалите «ones ::» в файле cpp. Измените мой ответ, чтобы это отразить. – Avi

 Смежные вопросы

  • Нет связанных вопросов^_^