Форум программистов, компьютерный форум CyberForum.ru

Запутался в ссылках - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Шифрование и дешифрование http://www.cyberforum.ru/cpp-beginners/thread608228.html
Помогите написать программу, которая будет шифровать и дешифровать матррицу.
C++ Добавление элемента в начало односвязного списка Здравствуйте, я не где не могу найти функцию по добавлению элемента в начало односвязного списка. Пожалуйста подскажите ее. http://www.cyberforum.ru/cpp-beginners/thread608215.html
C++ Изменение окна сообщения для исключительной ситуации
В программе есть контролируемая исключительная ситуация. Мне надо програмно изменить надпись вверху. Сейчас эта надпись берётся из названия exe фала. И обнаружил ещё один глюк. Название моего exe "Sloka Meter 2.01 beta". Но в сообщени отображается текст только до точки. Если убираю точку, тода показывается весь текст. Можно ли это исправить?
C++ Нужна поправка
здравствуйте.поправьте,пожалуйста, моё убожество.написал сначала функциями.а нужно в ооп. объектами не могу написать (не дружу я с ними:() я конечно попытался,но не вышло)) исправьте,пожалуйста.и,если можно,с объяснениями ошибок. #include "stdafx.h" #include <iostream> #include <conio.h> #include <cmath> #include <cstdlib> #include <ctime> #include <iomanip> using namespace std;
C++ GetPixel, почему первый иф равен тру, а второй - нет http://www.cyberforum.ru/cpp-beginners/thread608145.html
Уважаемые знатоки, в первом GetPixel корды верхнего левого угла иконки поплавка (певая вкладка, опять таки вверху слева), а во втором верхний левый пиксель собственно игры. Почему первый иф равен тру, а второй - нет?if (GetPixel(GetDC(hwnd),6,27)==RGB(60,106,140)) { i=1; return; } if (GetPixel(GetDC(hwnd),452,82)==RGB(50,42,24)) { i=1; return; }
C++ Не получается перевести 2 массива в строку Здравствуйте всем. Вобщем, курсовая, заданее следущее: написать класс для чисел единый, чтобы можно было складывать разные типы, int с double, длинные числа и т.п я додумался записывать числа в строки, потом складывать отдельно дробную часть, отдельно целую (в массивах), после записывать в строку, но когда пытаюсь слить в строку сложенную дробную и целую часть ничего не выходит, не пойму в... подробнее

Показать сообщение отдельно
No10
 Аватар для No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
18.06.2012, 09:51     Запутался в ссылках
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают.
main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <iomanip>
#include <windows.h>
#include <math.h>
#include "string2.h"
 
using namespace std;
 
char bufRus2[256];
char* Rus2(const char* text) {
      CharToOem(text, bufRus2);
      return bufRus2;
}
 
int main()
{
    String s1("Pozdravlyaem"), s2(" s dnem rozdenia"), s3("");
    cout << Rus2("s1 равно: \"") << s1 << "\"" << endl;
    cout << Rus2("s2 равно: \"") << s2 << "\"" << endl;
    cout << Rus2("s3 равно: \"") << s3 << "\"" << endl;
    cout << Rus2("Результат сравнения s2 и s1: ") << endl;
    cout << Rus2("s2 == s1 даёт результат: ") << (s2 == s1) << endl;
    cout << Rus2("s2 != s1 даёт результат: ") << (s2 != s1) << endl;
    cout << Rus2("s2 < s1 даёт результат: ") << (s2 < s1) << endl;
    cout << Rus2("s2 > s1 даёт результат: ") << (s2 > s1) << endl;
    cout << Rus2("s2 <= s1 даёт результат: ") << (s2 <= s1) << endl;
    cout << Rus2("s2 >= s1 даёт результат: ") << (s2 >= s1) << endl << endl;
 
    cout << Rus2("Проверка !s3:") << endl;
    if (!s3) {
        cout << Rus2("s3 пустая; присваивание s1 строке s3;") << endl;
        s3 = s1;
    }
 
    cout << Rus2("s1 += s2 даёт результат s1: ");
    s1 += s2;
    cout << s1 << endl << endl;
 
    cout << Rus2("s1 равно: \"") << s1 << "\"" << endl;
    cout << Rus2("s2 равно: \"") << s2 << "\"" << endl;
    cout << Rus2("s3 равно: \"") << s3 << "\"" << endl;
 
    cout << Rus2("s1 += \" vas \" даёт результат:") << endl;
    s1 += " vas ";
    cout << "s1 = " << s1 << endl << endl;
 
    cout << Rus2("Подстройка s1 начиная с ") << endl;
    cout << Rus2("нуля до 27, s1(0, 27), равно: ") << s1(0, 27) << endl << endl;
 
    cout << Rus2("Подстройка s1 начиная c ") << endl;
    cout << Rus2("28, s1(28, 0) равно: ") << s1(28, 0) << endl << endl;
 
    String *s4Ptr = new String (s1);
    cout << " *s4Ptr = " << *s4Ptr << endl;
 
    delete s4Ptr;
 
    s1[0] = 'P';
    s1[14] = 'D';
    cout << endl;
    cout << "s1 после s1[0] = 'P' и s1[14] = 'D' даёт результат: "
         << s1 << endl << endl;
 
    cout << Rus2("Попытка присвоить 'D' эелементу s1[50] даёт результат: ") << endl;
    s1[50] = 'D';
 
    system("pause");
    return 0;
}

string2.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef STRING2_H
#define STRING2_H
 
#include <iostream>
 
using namespace std;
 
class String {
        friend ostream &operator<< (ostream &, const String &);
        friend istream &operator>> (istream &, String &);
    public:
        String(const char * = "");
        String(const String &);
        ~String();
        const String &operator=(const String &);
        String &operator+=(const String &); // сцепление или конкатенация
        int operator!() const;
        int operator== (const String &) const;
        int operator!= (const String &) const;
        int operator< (const String &) const;
        int operator> (const String &) const;
        int operator<= (const String &) const;
        int operator>= (const String &) const;
        char &operator[](int);
        String operator()(int, int);
        int getLenght() const;
 
    private:
        char *sPtr;
        int lenght;
 
};
 
#endif // STRING2_H
string2.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <iomanip>
#include <string.h>
#include <assert.h>
#include <windows.h>
#include <math.h>
#include "string2.h"
 
using namespace std;
 
char bufRus[256];
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
 
String::String(const char *s)
{
    cout << Rus("Конструктор преобразования: ") << s << endl;
    lenght = strlen(s);
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, s);
}
 
String::~String()
{
    cout << Rus("Деструктор: ") << sPtr << endl;
    delete [] sPtr;
}
 
const String &String::operator=(const String &right)
{
    cout << Rus("Вызов operator=") << endl;
 
    if (&right != this) {
        delete [] sPtr;
        lenght = right.lenght;
        sPtr = new char[lenght + 1];
        assert(sPtr != 0);
        strcpy(sPtr, right.sPtr);
    }
    else { cout << Rus("Попытка самоприсваивания String.") << endl; }
 
    return *this;
}
 
String &String::operator+=(const String &right)
{
    char *tempPtr = sPtr;
    lenght += right.lenght;
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, tempPtr);
    strcat(sPtr, right.sPtr);
    delete [] tempPtr;
 
    return *this;
}
 
int String::operator!() const { return lenght == 0;}
 
int String::operator== (const String &right) const
{
    return strcmp(sPtr, right.sPtr) == 0;
}
 
int String::operator!= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) != 0;
}
 
int String::operator< (const String &right) const
{
    return strcmp(sPtr, right.sPtr) < 0;
}
 
int String::operator> (const String &right) const
{
    return strcmp(sPtr, right.sPtr) > 0;
}
 
int String::operator<= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) <= 0;
}
 
int String::operator>= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) >= 0;
}
 
char &String::operator[] (int subscript)
{
    assert(subscript >= 0 && subscript < lenght);
    return sPtr[subscript];
}
 
String String::operator() (int index, int subLenght)
{
    assert(index >= 0 && index < lenght && subLenght >= 0);
    String sub;
 
    if ((subLenght == 0) || (index + subLenght > lenght))
        sub.lenght = lenght - index + 1;
    else
        sub.lenght = subLenght + 1;
 
    delete sub.sPtr;
    sub.sPtr = new char [sub.lenght];
    assert(sub.sPtr != 0);
 
    strncpy(sub.sPtr, &sPtr[index], sub.lenght);
    sub.sPtr[sub.lenght] = '\0';
 
    return sub;
}
 
int String::getLenght() const { return lenght; }
 
ostream &operator<< (ostream &output, const String &s)
{
    output << s.sPtr;
    return output;
}
 
istream &operator>> (istream &input, String &s)
{
    char temp[100];
    input >> setw(100) >> temp;
    s = temp;
    return input;
}

А ошибка собсвенно одна:
C++
1
2
3
obj\Debug\main.o||In function `main':|
 C++\well\main.cpp|53|undefined reference to `String::String(String const&)'|
||=== Build finished: 1 errors, 0 warnings ===|
Никак не могу разобраться!!! Компилятор говорит что у меня ошибка в
String *s4Ptr = new String (s1);. Говорит что непознанная ссылка String::String(String const&). Ничего не пойму.
String *s4Ptr = new String (s1) - если я правильно понимаю мы создаём указатель на слот памяти в котором будет храниться переменная
на основе переменной s1? Верно?
Но я не пому ещё, какая функция отвечает за создание этого? Конструктор?
Вроде не конструктор, конструктор принимае String::String(const char *s), значение константного char`а.
И тут я вроде понял что эта функция String String::operator() (int index, int subLenght), но опять же
она принимает два целых значения, а у меня Строка!!!!! new String (s1)!!! s1 - это ведь переменная типа String, который мною определён.
Вообщем я окончательно запутался, вообще в тупике.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru