编程参考 - C++ 术语说明 Defined Terms - 1

本文详细介绍了C++编程语言中的基本概念和元素,包括函数、类、数据结构、输入输出流、变量、表达式、控制结构等。同时涵盖了标准库的使用,如iostream用于输入输出,以及错误处理和调试过程中的常见操作。对于初学者,这是理解C++语法和编程实践的重要参考资料。

argument Value passed to a function.

assignment Obliterates an object’s current value and replaces that value by  a new one.

block Sequence of zero or more statements enclosed in curly braces.

buffer A region of storage used to hold data. IO facilities often store input  (or output) in a buffer and read or write the buffer independently from actions in the program. Output buffers can be explicitly flushed to force the buffer to be written. By default, reading cin flushes cout; cout is also flushed when the  program ends normally.

built-in type Type, such as int, defined by the language.

cerr ostream object tied to the standard error, which often writes to the  same device as the standard output. By default, writes to cerr are not buffered. Usually used for error messages or other output that is not part of the normal logic of the program.

character string literal Another term for string literal.

cin istream object used to read from the standard input.

class Facility for defining our own data structures together with associated operations. The class is one of the most fundamental features in C++.  Library types, such as istream and ostream, are classes.

class type A type defined by a class. The name of the type is the class  name.

clog ostream object tied to the standard error. By default, writes to clog  are buffered. Usually used to report information about program execution to a log file.

comments Program text that is ignored by the compiler. C++ has two kinds  of comments: single-line and paired. Single-line comments start with a //. Everything from the // to the end of the line is a comment. Paired  comments begin with a /* and include all text up to the next */.

condition An expression that is evaluated as true or false. A value of zero is false; any other value yields true.

cout ostream object used to write to the standard output. Ordinarily used  to write the output of a program.

curly brace Curly braces delimit blocks. An open curly ({) starts a block; a  close curly (}) ends one.

data structure A logical grouping of data and operations on that data.

edit-compile-debug The process of getting a program to execute properly. 

end-of-file System-specific marker that indicates that there is no more  input in a file.

expression The smallest unit of computation. An expression consists of one  or more operands and usually one or more operators. Expressions are evaluated  to produce a result. For example, assuming i and j are ints, then i + j is  an expression and yields the sum of the two int values.

for statement Iteration statement that provides iterative execution. Often  used to repeat a calculation a fixed number of times.

function Named unit of computation.

function body Block that defines the actions performed by a function.

function name Name by which a function is known and can be called.

header Mechanism whereby the definitions of a class or other names are  made available to multiple programs. A program uses a header through a  #include directive.

if statement Conditional execution based on the value of a specified  condition. If the condition is true, the if body is executed. If not, the else body is  executed if there is one.

initialize Give an object a value at the same time that it is created.

iostream Header that provides the library types for stream-oriented input  and output.

istream Library type providing stream-oriented input.

library type Type, such as istream, defined by the standard library.

main Function called by the operating system to execute a C++ program.  Each program must have one and only one function named main.

manipulator Object, such as std::endl, that when read or written “manipulates” the stream itself.

member function Operation defined by a class. Member functions  ordinarily are called to operate on a specific object.

method Synonym for member function.

namespace Mechanism for putting names defined by a library into a single place. Namespaces help avoid inadvertent name clashes. The names defined  by the C++ library are in the namespace std.

ostream Library type providing stream-oriented output.

parameter list Part of the definition of a function. Possibly empty list that specifies what arguments can be used to call the function.

return type Type of the value returned by a function.

source file Term used to describe a file that contains a C++ program.

standard error Output stream used for error reporting. Ordinarily, the  standard output and the standard error are tied to the window in which the program is executed.

standard input Input stream usually associated with the window in which  the program executes.

standard library Collection of types and functions that every C++ compiler  must support. The library provides the types that support IO. C++ programmers  tend to talk about “the library,” meaning the entire standard library. They also  tend to refer to particular parts of the library by referring to a library type, such as  the “iostream library,” meaning the part of the standard library that defines  the IO classes.

standard output Output stream usually associated with the window in  which the program executes.

statement A part of a program that specifies an action to take place when the program is executed. An expression followed by a semicolon is a statement;  other kinds of statements include blocks and if, for, and while statements, all  of which contain other statements within themselves.

std Name of the namespace used by the standard library. std::cout  indicates that we’re using the name cout defined in the std namespace.

string literal Sequence of zero or more characters enclosed in double  quotes("a string literal").

uninitialized variable Variable that is not given an initial value. Variables  of class type for which no initial value is specified are initialized as specified by the class definition. Variables of built-in type defined inside a function are  uninitialized unless explicitly initialized. It is an error to try to use the value of an  uninitialized variable. Uninitialized variables are a rich source of bugs.

variable A named object.

while statement Iteration statement that provides iterative execution so  long as a specified condition is true. The body is executed zero or more times,  depending on the truth value of the condition.

() operator Call operator. A pair of parentheses “()” following a function  name. The operator causes a function to be invoked. Arguments to the function may  be passed inside the parentheses.

++ operator Increment operator. Adds 1 to the operand; ++i is equivalent  to i = i + 1.

+= operator Compound assignment operator that adds the right-hand  operand to the left and stores the result in the left-hand operand; a += b is equivalent  to a = a + b.

. operator Dot operator. Left-hand operand must be an object of class type  and the right-hand operand must be the name of a member of that object. The operator yields the named member of the given object.

:: operator Scope operator. Among other uses, the scope operator is used  to access names in a namespace. For example, std::cout denotes the name  cout from the namespace std.

= operator Assigns the value of the right-hand operand to the object  denoted by the left-hand operand.

-- operator Decrement operator. Subtracts 1 from the operand; --i is equivalent to i = i - 1.

<< operator Output operator. Writes the right-hand operand to the output stream indicated by the left-hand operand: cout << "hi" writes hi to the standard output. Output operations can be chained together: cout <<  "hi" << "bye" writes hibye.

>> operator Input operator. Reads from the input stream specified by the  lefthand operand into the right-hand operand: cin >> i reads the next value on the standard input into i. Input operations can be chained together: cin >>  i >> j reads first into i and then into j.

# include Directive that makes code in a header available to a program.

== operator The equality operator. Tests whether the left-hand operand is  equal to the right-hand operand.

!= operator The inequality operator. Tests whether the left-hand operand is  not equal to the right-hand operand.

<= operator The less-than-or-equal operator. Tests whether the left-hand operand is less than or equal to the right-hand operand.

< operator The less-than operator. Tests whether the left-hand operand is  less than the right-hand operand.

>= operator Greater-than-or-equal operator. Tests whether the left-hand operand is greater than or equal to the right-hand operand.

> operator Greater-than operator. Tests whether the left-hand operand is greater than the right-hand operand.

参考:

C++ Primer 第五版

<think>我们正在处理一个编程错误:"user-defined type not defined"。这个错误通常发生在VBA(Visual Basic for Applications)环境中,当编译器无法识别代码中使用的用户定义类型(如类、结构体或枚举)时。根据引用[1]和引用[3]的思路,我们可以推断出这个错误的原因可能是类型未定义或未正确引用。下面将提供详细的解决方案。 ### 错误原因分析 1. **类型未定义**:代码中使用了自定义类型(如类模块、用户定义类型),但该类型尚未定义。 2. **引用缺失**:缺少必要的类型库或对象库引用。 3. **作用域问题**:类型定义在另一个模块中,但访问权限不足(如`Public`关键字缺失)。 4. **拼写错误**:类型名称拼写错误。 --- ### 解决方案(分步操作) #### 步骤1:检查类型定义是否存在 1. 在VBA编辑器中,检查工程资源管理器是否包含定义该类型的模块(类模块、标准模块)。 - 类模块:确保类模块存在且名称与代码中使用的完全一致(包括大小写)。 - 用户定义类型(Type):在标准模块中使用`Public Type`定义,不能在类模块中定义。 示例:定义一个名为`MyPoint`的类型 ```vba ' 在标准模块中定义 Public Type MyPoint X As Double Y As Double End Type ``` 2. 如果类型定义在另一个工作簿或库中,确保该工作簿已打开或库已正确引用(见步骤2)。 #### 步骤2:添加必要的引用 1. 在VBA编辑器中,点击**工具** → **引用**。 2. 在弹出的引用对话框中,查找并勾选缺失的库(例如,如果使用ADO,则需要勾选`Microsoft ActiveX Data Objects x.x Library`)。 3. 如果类型定义在另一个工作簿中,需要添加对该工作簿的引用(通过**浏览**按钮找到该工作簿)。 ![VBA引用设置界面](https://example.com/vba-references.png) *图:添加缺失的引用[^1]* #### 步骤3:检查类型的作用域 - 自定义类型(Type)默认是私有的(仅在模块内可见)。若要在其他模块中使用,必须使用`Public`关键字: ```vba ' 正确:在标准模块中定义公共类型 Public Type MyPoint X As Double Y As Double End Type ``` - 类模块的名称即为类型名。确保类模块的`Instancing`属性设置为`PublicNotCreatable`(在VBA中通常默认如此,但需检查类模块是否被重命名或删除)。 #### 步骤4:检查拼写和大小写 - VBA不区分大小写,但必须确保拼写完全正确(包括空格和特殊字符)。 - 示例:定义类型为`MyPoint`,但代码中写为`MyPointt`会导致错误。 #### 步骤5:重新初始化VBA环境 如果以上步骤都正确,但错误仍然存在: 1. 导出所有模块(备份)。 2. 关闭并重新打开VBA编辑器。 3. 重新导入模块。 --- ### 错误预防措施 1. **使用明确的类型前缀**: ```vba ' 使用模块前缀(如果类型在另一个模块中) Dim pt As MyModule.MyPoint ``` 2. **动态类型检查**: ```vba If TypeOf myObj Is MyClass Then ' 安全使用 End If ``` 3. **错误处理增强**: ```vba On Error Resume Next Set myObj = New MyClass ' 尝试实例化 If Err.Number <> 0 Then MsgBox "类型未定义,错误号:" & Err.Number End If ``` --- ### 技术原理说明 在VBA中,用户定义类型(UDT)和类模块在编译时被处理为元数据。当编译器遇到未识别的类型时,会抛出`user-defined type not defined`错误。其根本原因是类型元数据未加载到当前作用域,可能由于: - 类型定义未编译(模块未保存或包含语法错误)。 - 类型库版本不兼容(例如64位与32位问题)。 类型解析公式: $$ \text{类型可访问} \iff \text{定义模块} \in \text{引用集} \land \text{Public} \land \text{无语法错误} $$ --- ### 替代方案(避免UDT) 如果问题持续存在,可使用类模块替代用户定义类型: ```vba ' 类模块:MyPointClass Public X As Double Public Y As Double ``` 使用: ```vba Dim pt As New MyPointClass pt.X = 10 pt.Y = 20 ``` §§相关问题§§ 1. VBA中如何解决"编译错误:变量未定义"? 2. 如何在VBA中正确引用外部类型库? 3. VBA类模块与标准模块有何区别? 4. 如何调试VBA中的编译时错误?</think>### 解决 "User-Defined Type Not Defined" 错误 在编程中遇到 **"User-Defined Type Not Defined"** 错误通常表示编译器无法识别您使用的自定义类型。以下是系统化的解决方案: --- ### 错误原因分析 1. **类型未声明**:使用了未定义的自定义类型(类、结构体、枚举等) 2. **作用域问题**:类型定义在不可访问的模块或命名空间中 3. **引用缺失**:缺少必要的库引用(如对象库、类型库) 4. **编译顺序问题**:类型定义在引用代码之后编译 5. **拼写错误**:类型名称拼写不一致(大小写敏感) --- ### 解决方案(分步操作) #### 步骤1:声明自定义类型 在标准模块中正确定义类型: ```vba ' 在标准模块中定义 Public Type EmployeeData ID As Long Name As String Salary As Currency End Type ``` #### 步骤2:检查作用域和访问权限 - 类模块:确保类模块存在且名称为 `MyClass` ```vba ' MyClass.cls 文件 Public Property Get Value() As Integer ' 实现 End Property ``` - 使用前声明实例: ```vba Dim obj As MyClass ' 正确 Set obj = New MyClass ``` #### 步骤3:添加必要引用(VBA示例) 1. 打开VBA编辑器 (`ALT+F11`) 2. 工具 → 引用 3. 勾选缺失的库(如 `Microsoft ActiveX Data Objects x.x Library`) 4. 确认后点击"确定" ![VBA引用设置界面](https://example.com/vba-references.png) *图:添加缺失的引用[^1]* #### 步骤4:解决编译顺序问题 1. 在VBA编辑器中右键项目 2. 选择"导入文件" 3. 先导入包含类型定义的模块(`.cls`, `.bas`文件) 4. 后导入使用这些类型的模块 #### 步骤5:检查拼写一致性 ```vba ' 定义 Public Type Coordinate X As Double Y As Double End Type ' 使用 - 确保完全匹配 Dim point As Coordinate ' 正确 Dim pt As Coordinat ' 错误!少了一个字母 ``` --- ### 错误预防措施 1. **使用明确的类型前缀**: ```vba ' 模块前缀避免歧义 Dim emp As HRModule.EmployeeData ``` 2. **动态类型检查**: ```vba If TypeName(myObj) = "MyClass" Then ' 安全操作 End If ``` 3. **错误处理增强**: ```vba On Error Resume Next Set obj = New MyClass If Err.Number = 438 Then ' 用户定义类型错误 MsgBox "类型未定义,请检查声明" End If ``` --- ### 技术原理说明 当编译器遇到未定义的类型时: $$ \text{编译失败} \iff \exists T \in \text{Code} \mid T \notin \text{KnownTypes} $$ 其中: - $T$ = 代码中使用的类型 - $\text{KnownTypes}$ = 编译器已知类型集合 类型解析过程: 1. 检查当前模块声明 2. 检查引用库的元数据 3. 检查项目全局声明 4. 若未找到 → 抛出"User-Defined Type Not Defined" --- ### 替代方案(避免自定义类型) 若问题持续存在,可用内置类型替代: ```vba ' 使用字典替代自定义类型 Dim employee As Object Set employee = CreateObject("Scripting.Dictionary") employee.Add "ID", 1001 employee.Add "Name", "John" employee.Add "Salary", 5000 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值