待解决问题汇总

以下为本人待解决问题,有能解决的大佬看到,恳请帮忙解决一下,感激不尽。

1
本人qq邮箱:503969402@qq.com

问题汇总

问题1(已解决)

开发环境:

Microsoft Visual Studio Community 2015
版本 14.0.24720.00 Update 1
Microsoft .NET Framework
版本 4.8.03761

问题描述:

以下代码为什么出错?

代码如下:

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
#include"iostream"
#include <string>
using namespace std;
class Building
{
friend void GoodGay::visit();
public:
Building()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
string m_SittingRoom;
private:
string m_BedRoom;
};
class GoodGay
{
public:
GoodGay()
{
m_building = new Building;
}
void visit()//此函数要可以访问到Building
{
cout << "正在访问"<<this->m_building->m_SittingRoom << endl;
cout << "正在访问" << this->m_building->m_BedRoom << endl;
}
Building* m_building;
};
int main() {
GoodGay gg;
gg.visit();
system("pause");
return EXIT_SUCCESS;
}

报错如下:

image-20210104125726016

一定要写成如下代码才能执行:

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
#include"iostream"
#include <string>
using namespace std;
class Building;
class GoodGay
{
public:
GoodGay();
void visit();//此函数要可以访问到Building
Building* m_building;
};
class Building
{
friend void GoodGay::visit();
public:
Building();

string m_SittingRoom;
private:
string m_BedRoom;
};
Building::Building()
{
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
void GoodGay::visit()//此函数要可以访问到Building
{
cout << "正在访问" << m_building->m_SittingRoom << endl;
cout << "正在访问" << m_building->m_BedRoom << endl;
}
GoodGay::GoodGay()
{
m_building = new Building;
}
int main() {
GoodGay gg;
gg.visit();
system("pause");
return EXIT_SUCCESS;
}

已解决:先后声明问题。而且必须是声明和实现隔离。

问题2

image-20210120230828691
1
2
3
class MyClassA:virtual public MyClass
class MyClassB:virtual public MyClass
class MyClassC:public MyClassA,public MyClassB

由于虚继承的本身语义,MyClassC内必须重写fun函数?

问题3

开发环境:

Microsoft Visual Studio Community 2015
版本 14.0.24720.00 Update 1
Microsoft .NET Framework
版本 4.8.03761

dynamicArray.h

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
#pragma once
#ifdef _DEBUG
#define New new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
#include <iostream>
using namespace std;


template<class T>
class DynamicArray
{
T* pArray=NULL;
int mCapacity;
int msize=0;
public:
DynamicArray();

DynamicArray(int capacity);

DynamicArray(const DynamicArray<T>& dynamicArray);

DynamicArray(T* t, int num);

~DynamicArray();

DynamicArray<T>& operator=(const DynamicArray<T>& dynamicArray);

DynamicArray<T> operator+(const DynamicArray<T>& dynamicArray);//不改变原来的拼接

friend ostream& operator<<<>(ostream& cout, const DynamicArray<T>& dynamicArray);
//template<class T>//------------------------------------------------------------------------1
//friend ostream& operator<<(ostream& cout, const DynamicArray<T>& dynamicArray);//-----------2(写1,2行表示用函数模板的方式,这样也可以,就不用写<>了)

T& operator[](int index);

DynamicArray<T>& append_DynamicArray(const DynamicArray<T> dynamicArray);//改变原来的拼接

DynamicArray<T>& insert_DynamicArray(int pos,T data);//插入

DynamicArray<T>& delete_DynamicArray(int pos);//删除

DynamicArray<T>& clear_DynamicArray();//清空

DynamicArray<T>& Push_back_DynamicArray(T data);//推入数据

T Pop_back_DynamicArray();//弹出数据

int getLength();//获取长度

int GetCapacity();//获取容量
};

dynamicArray.hpp

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include "dynamicArray.h"
#include <string.h>
template<class T>
DynamicArray<T>::DynamicArray()
{
mCapacity = 5;
pArray = New T[mCapacity];
//cout<<"New一个"<<pArray<<endl;
}

template<class T>
DynamicArray<T>::DynamicArray(int capacity)
{
mCapacity = capacity;
pArray = New T[mCapacity];// 如果T是对象,那么这个对象必须提供默认的构造函数
//cout << "New一个" << pArray << endl;
}

template<class T>
DynamicArray<T>::DynamicArray(const DynamicArray<T>& dynamicArray)
{
mCapacity = dynamicArray.mCapacity;
msize = dynamicArray.msize;
pArray = New T[mCapacity];
//cout << "New一个" << pArray << endl;
memcpy(pArray, dynamicArray.pArray, sizeof(T)*mCapacity);
}

template<class T>
DynamicArray<T>::DynamicArray(T* t, int num)
{
mCapacity = num;
msize = num;
pArray = New T[mCapacity];
//cout << "New一个" << pArray << endl;
memcpy(pArray, t, sizeof(T)*mCapacity);
}

template<class T>
DynamicArray<T>::~DynamicArray()
{
if (pArray)
{
//cout << "delete一个" << pArray << endl;
delete[] pArray;
pArray = NULL;
}
}

template<class T>
DynamicArray<T>& DynamicArray<T>::operator=(const DynamicArray<T>& dynamicArray)
{
//如果有原内存空间删除原内存空间
if (pArray)
{
delete[] pArray;
}
mCapacity = dynamicArray.mCapacity;
pArray = New T[mCapacity];
//cout << sizeof(T)*mCapacity << endl;
memcpy(pArray, dynamicArray.pArray, sizeof(T)*mCapacity);
msize = dynamicArray.msize;
return (DynamicArray<T>&)dynamicArray;
}

template<class T>
inline DynamicArray<T> DynamicArray<T>::operator+(const DynamicArray<T>& dynamicArray)
{
DynamicArray<T> tmpArray(msize +dynamicArray.msize);
tmpArray.msize = msize + dynamicArray.msize;
memcpy(tmpArray.pArray, pArray, sizeof(T)*msize);
memcpy(tmpArray.pArray+msize, dynamicArray.pArray, sizeof(T)*dynamicArray.msize);
return tmpArray;
}

template<class T>
inline T & DynamicArray<T>::operator[](int index)
{
// TODO: 在此处插入 return 语句
return pArray[index];
}

template<class T>
inline DynamicArray<T>& DynamicArray<T>::append_DynamicArray(const DynamicArray<T> dynamicArray)
{
//查看容量是够足够拼接,不够的话就扩容
if (mCapacity<msize+dynamicArray.msize)
{
mCapacity = msize + dynamicArray.msize;
T* oldpArray = pArray;
pArray = New T[mCapacity];
memcpy(pArray, oldpArray, sizeof(T)*msize);
delete[] oldpArray;
}
memcpy(pArray+msize, dynamicArray.pArray, sizeof(T)*dynamicArray.msize);
msize += dynamicArray.msize;
return *this;
}

template<class T>
inline DynamicArray<T>& DynamicArray<T>::insert_DynamicArray(int pos, T data)
{
if (pos>msize)
{
pos = msize;
}
if (pos<0)
{
pos = 0;
}
if (msize==mCapacity)//需要扩容
{
mCapacity++;
T* oldPArray = pArray;
pArray = New T[mCapacity];
memcpy(pArray,oldPArray,sizeof(T)*pos);
pArray[pos] = data;
memcpy(pArray + pos + 1, oldPArray + pos, sizeof(T)*(msize - pos));
msize++;
delete[] oldPArray;
}
else
{
memmove(pArray+pos+1, pArray+pos, sizeof(T)*(msize - pos));
pArray[pos] = data;
msize++;
}
return *this;
}

template<class T>
inline DynamicArray<T>& DynamicArray<T>::delete_DynamicArray(int pos)
{
if (pos >= msize)
{
pos = msize-1;
}
if (pos < 0)
{
pos = 0;
}
memmove(pArray + pos, pArray + pos + 1,sizeof(T)*(msize - pos - 1));//memcpy不能处理重叠位置的挪移,要用memmove
msize--;
return *this;
}

template<class T>
inline DynamicArray<T>& DynamicArray<T>::clear_DynamicArray()
{
msize = 0;
return *this;
}

template<class T>
inline DynamicArray<T>& DynamicArray<T>::Push_back_DynamicArray(T data)
{
if (msize == mCapacity)//需要扩容
{
mCapacity++;
T* oldPArray = pArray;
pArray = New T[mCapacity];
memcpy(pArray, oldPArray, sizeof(T)*msize);
pArray[msize] = data;
msize++;
delete[] oldPArray;
}
else
{
pArray[msize] = data;
msize++;
}
return *this;
}

template<class T>
inline T DynamicArray<T>::Pop_back_DynamicArray()
{
if (this->m_Size == 0)
{
return NULL;
}
msize--;
return pArray[msize];
}

template<class T>
inline int DynamicArray<T>::getLength()
{
return msize;
}

template<class T>
inline int DynamicArray<T>::GetCapacity()
{
return mCapacity;
}



template<class T>
ostream& operator<<(ostream& cout, const DynamicArray<T>& dynamicArray)
{
for (int i = 0; i < dynamicArray.msize; i++)
{
cout << dynamicArray.pArray[i] << " ";
}
return cout;
}

main.cpp

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
#include <iostream>
using namespace std;
#include "dynamicArray.hpp"
//下面用于定位内存泄露位置

#ifdef _DEBUG
#define New new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <string>


//用Person类来测试动态数组模板类
class Person
{
string mName;
int mAge;
public:
Person(){ cout << "临时构造" << this << endl; }//必须提供默认构造函数,才能供dynamicArray构造Person
~Person(){cout<<"析构"<<mName<<this<<endl;}
Person(Person& p)
{
mAge=p.mAge ;
mName=p.mName;
cout<<"拷贝构造"<<mName<<this<<endl;
}
Person(string name,int age)
{
mName = name;
mAge = age;
cout << "有参构造" << mName << this << endl;
}
friend ostream& operator<<(ostream& cout, Person& p)//必须提供默认构造函数,才能供dynamicArray输出显示
{
cout << "年龄:" << p.mAge << " 名称:" << p.mName<<endl;
return cout;
}
};



void intDynamicArrayTest()
{
int a[5] = { 5,4,3,2,1 };
int b[5] = { 1,2,3,4,5 };
DynamicArray<int> dynamicArray(b, 5);
DynamicArray<int> dynamicArray1(a, 5);
dynamicArray.insert_DynamicArray(10, 9).insert_DynamicArray(10, 10);
dynamicArray.delete_DynamicArray(10).delete_DynamicArray(10);
cout<< dynamicArray <<endl;
cout << dynamicArray1 << endl;

}

void personDynamicArrayTest()
{
Person p1("小明", 16);
Person p2("小红", 22);
Person p3("小张", 18);
Person p4("小白", 20);
DynamicArray<Person> dynamicArray;
dynamicArray.insert_DynamicArray(0,p1);
cout<<dynamicArray<<endl;
dynamicArray.insert_DynamicArray(0, p4);
cout << dynamicArray << endl;

}


int main()
{
//intDynamicArrayTest();
personDynamicArrayTest();
_CrtDumpMemoryLeaks();//用于检测内存泄露,必须放在此处,开辟test函数的目的是为了当test函数执行完后,该释放的内存早该释放了,此时才可以在这里测试是否有内存泄露
return 0;
}

运行如下:

image-20210220172330584

无法理解!

windows server 2012 r2安装vmware遇到的问题盘点

windows server 2012 r2要安装vmware2014版本,安装vmware2015及以上版本需要更新windows补丁包,十分繁琐,未尝试

apt镜像源,参考此处

Ubuntu22.04.4安装vmware-tools工具会出现段错误,参考此处

vmware端口转发设置,参考此处

设置linux系统的dns sudo vim /etc/resolv.conf

桥接模式详细步骤

ubuntu防火墙设置放行非常用端口 sudo ufw allow 8443/tcp

查看防火墙: sudo ufw status

查看端口使用

u盘检测:有,可以设置只读模式,可以限制无法插入外设,有白名单功能

软件安装:可以检测启用状态和是否安装状态,但是不能限制安装

涉密问题:肉眼不可见的屏幕水印,阻断部分应用外发敏感数据

  • 私开热点检测
  • 代理检测